php:在浏览器关闭的情况下保存登录信息


php : save login although browser is closed

如何创建一个在浏览器关闭的情况下仍然登录(只要用户不会点击注销)的登录系统?

当使用$_SESSION时,当浏览器关闭时它就不见了。因此,我们可以使用$_COOKIE,但它看起来不如会话安全。

雅虎、脸书、推特或任何网站是如何创建登录系统的,所以当用户关闭浏览器时,它将保持登录状态?使用IP$_会话$_饼干?还是怎样

感谢

您可以设置会话cookie的生存期。默认情况下,它处于浏览器关闭状态。您可以在php.ini中执行此操作,或者查看http://php.net/manual/en/function.session-set-cookie-params.php

当用户登录时,加密cookie中的必要信息。当他们访问您的网站时,解密cookie以获取您的信息。

另一种安全措施是使用数据库来验证cookie。这将有助于提高一些安全性。我不是安全专家,你可能还应该考虑其他安全措施,但这应该有助于你开始。

确保您没有使用会话cookie来识别会话。为此,使用session_set_cookie_params()可以延长cookie的使用寿命。

请确保会话超时时间较长。这可以通过调整session.gc-maxlifetime配置选项的值来实现。

看起来StackOverflow和Youtube使用本地存储。

与cookie不同,本地存储没有过期日期,但当用户登录或在服务器上做了更改时,您需要手动将本地存储中的数据发送到服务器以进行验证(通过XHR或其他通信方式)。当用户注销时,使用保存登录信息的密钥调用window.localStorage.removeItem()。

正如Oswald所说,不要使用$_SESSION,因为这将在浏览器关闭时结束。

会话变量存储为cookie,因此创建自己的变量不是less secure

在创建自己的COOKIES时,您应该将过期时间设置为较长的时间,例如一年左右,以确保cookie不会过期,并且用户将保持登录状态。

绝大多数生产网站都使用cookie来保存会话,只需确保您的会话密钥足够随机,不会被其他客户猜到。

编辑

请参阅有关如何使用setcookie的链接。

setcookie("session_key", "somerandomstringrepresentingasessionkey", time() + 60*60*24*120);

下面将为您的网站设置一个名为session_key的会话密钥,这就是您在运行时获取数据的方式:

$session = $_COOKIE['session_key'];

下一部分是您的值将存储在哪里,这将是您将存储在数据库中的会话密钥,以便提取并与用户匹配,$session的值现在将是什么。

下一部分是到期前的时间,这里我放了60 * 60 * 24 * 120,意思是当前时间,加上60秒,乘以60分钟,乘以24小时,乘以120天。这意味着,从那一刻起的120天内,该特定cookie将过期,即使在此之前浏览器已关闭。