我应该同时使用SESSION和COOKIE还是只使用COOKIE ?


Should I use Both SESSION and COOKIE or Just COOKIE?

我有一个用户登录系统在我的网站,我有一个困惑。目前我没有"记住我"复选框在用户登录系统。目前我正在使用类似这样的东西来登录用户。

$_SESSION['user_id'] = $_POST['user_id'];
$_SESSION['user_name'] =$_POST['user_name'];

但是现在,我想放一个"记住我"复选框,为此我需要使用COOKIE。我想知道程序应该是什么

If user checks the 'Remember Me' Checkbox I need to use COOKIE. 
But If user does not check the 'Remember Me' Checkbox should I use SESSION? or COOKIE?

请勿将密码存储在cookie中。创建一个新的随机值,作为用户名和密码的组合,并将其存储在cookie和用户数据库中。

对这个随机值的要求:它必须是唯一的(像用户名/密码组合),它必须是加密随机的,而不仅仅是"散列当前时间"的伪随机。或者rand()。或mt_rand()

请求将尝试继续会话。如果不成功,要验证请求,首先检查是否存在remember-me cookie。这将触发数据库中的查找,并可能找到一个用户。此用户必须在此会话中登录。

对于cookie,您可以同时做到这两点,但是数据将保留在客户端,因此您需要对数据进行加密。

对于会话,你只能在用户登录时保存数据。

所以答案是COOKIES

对于会话,无论如何都需要cookie,因为会话ID存储在cookie中。

对于"记住我"功能,您可以延长会话cookie的生存期(默认0 -在浏览器会话结束时到期)。因此,当登录用户登录时,如果勾选"记住我",则将会话cookie过期时间设置为较大的时间(例如1周),如果未勾选"记住我",则将会话cookie过期时间设置为0(在浏览器会话结束时)。

您需要在某处存储SESSION ID。这可以是cookie或GET参数粘到每个GET请求。正常情况下,调用session_start()时自动使用cookie

Use $_SESSION

会话保存它的数据,如用户名和密码在服务器上,并给用户一个cookie的会话ID,它告诉服务器哪一组数据属于哪个浏览器,它被称为会话cookie(有其他的方法来存储会话ID,但超出了范围)。只要会话cookie保存在浏览器缓存中并且有效(没有过期),他们就会保持登录状态。

"Keep me logged in"功能可以通过延长session cookie的过期时间来实现。这可能是你最安全的选择。但是如果你想深入研究的话,你需要阅读会话劫持。

请看:http://php.net/manual/en/function.session-set-cookie-params.php

特别是:

session.cookie_lifetime

正如它提到的,它的值默认为0,直到浏览器关闭。让它成为一个合理的秒数,86400为1天(除非我累到数学),你会保持他们登录的一天,除非浏览器缓存被清除(关闭浏览器是常见的,但你不能做任何事情)。我认为向上的上限是有符号整数的最大值,所以:2,147,483,647/86,400 = 24,855(ish)天。如果你需要的话,有很多