0

所以我的网站设置为在 30 分钟后销毁会话,我想为用户提供一个记住我的选项。

基本上它会像这样工作,请原谅我的伪代码

setcookie("sitename[id]", $userid, time()+60*60*24*30);
setcookie("sitename[pass]", $hasedandsaltedpassword);
setcookie("sitename[username]", $username);

因此,当用户自动注销时,我会检查 cookie 的可用性

$count = $dbh->prepare("SELECT id FROM users WHERE name = :name AND id = :id AND pass = :pass");
    $count->bindParam(":name", $_COOKIE["sitename"]["username"]);
    $count->bindParam(":id", $_COOKIE["sitename"]["id"]);
    $count->bindParam(":pass", $_COOKIE["sitename"]["pass"]);
    $count->execute();
    $count = $count->rowCount();

如果行数大于 0 但不大于 1,那么我为它们设置新的会话变量。

4

2 回答 2

1

这会起作用,但不是特别安全。您只是将预先散列的密码与您的数据库进行比较......因此,由于密码永远不会更改,因此您基本上可以让任何有权访问 cookie 的人只要通过修改 cookie 数据就可以随时登录。

我建议向数据库添加另一个表(或扩展当前用户表)以包含被“记住”的计算机,同样也是该纪念何时到期的字段。这样,您可以做两件额外的事情:1) 如果需要,请提前使登录过期,以及 2) 验证 cookie 没有被扩展。即使那样,它在技术上也不是“安全的”,但你会更接近。

于 2012-07-19T06:04:58.883 回答
0

就是这样...但是您需要检查以下内容->如果用户选择记住我,则只需检查此条件->如果您已成功注销,则无需再次检查

于 2012-07-19T05:52:52.457 回答