使用 PHP Cookie 重新初始化用户登录的最佳方法


Best way to re-initialize user login with PHP Cookie

我构建了一个半基本的用户系统,它使用会话来检查用户是否已登录。现在,我想创建一个记住我复选框来创建一个 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 的"登录"过程将是:

  1. 从 cookie 中收集用户名和随机数。
  2. 查看是否存在具有该用户名和随机数的用户。
  3. 如果用户存在,请记录它们
  4. 生成一个新的随机数并将其存储在数据库中并更新其cookie。

随机数对于每个用户应该是唯一的,并且只能使用一次。

生成随机数相当容易,它只需要是一个无法预测的随机字符串。你可以只使用带有随机输入的uniqid()或hash()。

http://php.net/manual/en/function.hash.php