我构建了一个半基本的用户系统,它使用会话来检查用户是否已登录。现在,我想创建一个记住我复选框来创建一个 cookie,该 cookie 将在一两年内删除其自身。我已经创建了该部分,但是使用该cookie保持用户登录的最佳方法是什么?
我知道会话最终会消失,那么阻止我的cookie发生这种情况的最佳方法是什么。我只将用户名存储在cookie中,没有密码。此外,有什么好方法可以阻止人们编辑他们的cookie以"愚弄"系统,使其认为这是他们的帐户......目前这是我检查用户是否已登录的功能:
public function isloggedin()
{
if (isset($_SESSION['user']))
{
return true;
} else
{
return false;
}
}
这就是我生成 cookie 的方式:
setcookie("XE_RememberMe", $username, time()+ 10 * 365 * 24 * 60 * 60,'/');
另外,饼干有哪些好的做法?
用户登录后,创建唯一的会话 ID 并将此 ID 推送到表 sessions_id
(相对于表users
),并将相同的 ID 推送到 cookie。此外,将 cookie id 与表 sessions_id
进行比较。
如果将用户名存储在 cookie 中是登录用户的唯一标准,那么任何人都可以创建或更新 cookie 以任何任意用户身份登录。
你需要的是一个随机数:http://en.wikipedia.org/wiki/Cryptographic_nonce
当用户登录时,会生成一个随机数并将其存储在cookie(以及用户名)以及用户数据库中。
然后,cookie 的"登录"过程将是:
- 从 cookie 中收集用户名和随机数。
- 查看是否存在具有该用户名和随机数的用户。
- 如果用户存在,请记录它们
- 生成一个新的随机数并将其存储在数据库中并更新其cookie。
随机数对于每个用户应该是唯一的,并且只能使用一次。
生成随机数相当容易,它只需要是一个无法预测的随机字符串。你可以只使用带有随机输入的uniqid()或hash()。
http://php.net/manual/en/function.hash.php