【发布时间】:2012-03-11 15:47:24
【问题描述】:
我是 cookie 和(实际上一般是 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),而会话还不够好.我还听说延长会话的生命周期并不能保证它们会被删除。
关于安全性:我的网站不需要超级超级安全,我认为仅此令牌就足够了吗?
【问题讨论】:
-
这看起来是经过深思熟虑的。请记住,您还可以使用 PHP 会话 PHP,它还存储会话唯一的哈希。
-
但我已经解释过会话不会保留足够长的时间对我来说:)
-
我只是在看底部的文字,不确定是你刚刚添加的,还是因为我一直在努力睁开眼睛:)抱歉。
-
stackoverflow.com/search?q=%5Bphp%5D+persistent+login+cookie - 另请参阅右侧的相关栏 -->
标签: php session cookies remember-me