使用cookie记住并验证用户

时间:2012-03-11 15:47:25

标签: php session cookies remember-me

我是饼干和(实际上是PHP)的新手,我想为我正在研究的网站实施一个“记住我”系统。在这里以及其他网站上阅读了很多帖子之后,我明白我不应该在cookie中输入用户的密码或任何其他输入。一种解决方案是在数据库表中使用remember_key,每次用户登录时,都会重新生成“记住我”复选框。当用户再次访问该页面时,代码应从数据库中选择remember_key并检查$_COOKIE['remember']是否与remember_key相同,如果是,则用户已登录。但是我不确定如何实现这一点。我已经按照我认为应该的方式编写了一些代码,但我可以使用一些帮助来查看我已经拥有的是否正确以及如何继续。这就是我现在所拥有的:

function rememberUser($id) {

    $remember = md5(uniqid(mt_rand(),true));
    $stmt = $mysqli->prepare("UPDATE USERS SET USER_REMEMBER_KEY = ?    WHERE USER_ID = ?");
    $stmt->bind_param('si', $remember, $id);
    $stmt->execute();
    setcookie("remember", $remember, time()+60*60*24*30, "/", "www.someName.com", false, true);
}

function isValidUser($id) {

    $stmt = $mysqli->prepare("SELECT * FROM USERS WHERE USER_REMEMBER_KEY = ? AND USER_ID = ?");
    $stmt->bind_param('si', $_COOKIE['remember'], $id);
    $stmt->execute();

    $stmt->store_result();
    $count = $stmt->num_rows;

    if($count == 1) {
        return true;
    }
    else {
        return false;
    }
}

function forgetUser($id) { // not sure about this method at all!

    setcookie("remember", '', time()-3600, "/", "www.someName.com", false, true);

}

forgetUser()会删除$_COOKIE['remember'](或它的值?),但它如何知道它是该特定人的Cookie?我想对我现在的代码以及如何改进代码提出任何意见/建议/提示/提示或其他任何内容。

为了您的信息,我已经了解会话,它们易于使用且更安全(我猜),但我需要让用户登录更长时间(如FB)并且会话不够好。我还听说,给予会话很长一段时间并不能保证删除它们。

关于安全性:我的网站不需要超级超级安全,我认为这个令牌就足够了吗?

1 个答案:

答案 0 :(得分:1)

我将会话用于安全部分,并在cookie中使用hash或user_id。 cookie只能由您的网站访问。因此,除非其他人在同一台计算机上登录,否则如果您有足够长的时间,那么cookie就会坐在那里。因此,下周他们回到您的网站并读取cookie时,您只需使用存储在数据库中的user_id或哈希开始(您的会话版本是什么)。如果哈希不匹配,则用户必须再次登录
我希望那就是你所追求的。

编辑:

// I can't remember why right now, But I found to delete the cookie properly,
// after setcookie, I had to unset the $_COOKIE also.
setcookie("userid", "", time() - 3600);
unset($_COOKIE['userid']);