如何创建一个在浏览器关闭的情况下仍然登录(只要用户不会点击注销)的登录系统?
当使用$_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将过期,即使在此之前浏览器已关闭。