2012-03-11 69 views
1

我是新来的饼干和(实际上一般的PHP),我想为我正在工作的网站实现“记住我”系统。在阅读了很多帖子和其他网站之后,我知道我不应该在cookie中输入用户的密码或任何其他信息。一种解决方案是在数据库表中使用remember_key,每次用户使用“记住我”复选框进行登录时都会重新生成该复选框。当用户再次访问该页面时,代码应该从db中选择remember_key,并检查​​是否与remember_key相同,如果它是用户登录的。但我不确定如何实现此操作。我以我认为我应该的方式编写了一些代码,但我可以使用一些帮助来查看我已有的是否正确以及如何继续。这是我现在有:(?或者它的价值)记住并验证用户使用Cookie

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()将删除​​,但它是如何知道它是特定人的饼干吗?我想对我现在的代码提出任何意见/建议/提示/提示或其他任何内容,以及我如何改进它。

为了您的信息我已经知道会话,他们很容易使用和更安全(我猜),但我需要保持用户登录更长的时间(如FB)和会话不够好那。我也听说长时间的会话不会保证删除。

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

+0

小艾深思熟虑。请记住,您也可以使用PHP会话[PHP](http://www.php.net/manual/en/function.session-start.php),它还存储会话唯一的散列。 – Bradmage 2012-03-11 15:54:49

+0

但我已经解释过会话不会保留足够长的时间:) – Loolooii 2012-03-11 16:01:19

+0

我只是在看底部的文本,并不确定你是否刚刚添加它,或者我是因为我很挣扎保持我的眼睛开放:)抱歉。 – Bradmage 2012-03-11 16:02:30

回答

1

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

我希望这就是你以后的样子。

编辑:

// 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']); 
+0

其实你说的是我已经知道的cookies。我知道cookie存储在用户的PC和服务器上的会话中。第三种方法是我不确定的。这是删除cookie的正确方法吗?谢谢。 – Loolooii 2012-03-11 16:05:43

+0

没有问题,很高兴看到不是每个人都因为没有得到正确的答案而生气。 – Bradmage 2012-03-11 16:14:57