实现“记住我”功能

时间:2012-08-12 02:30:47

标签: php session

基本上我有一个具有基本会话功能的登录系统,它在浏览器关闭时超时。我一直在接受投诉,所以我希望能够点击记住刻度并让他们的会话持续30天。

2 个答案:

答案 0 :(得分:2)

如上所述,可以使用cookies完成。有很多tutorials,但安全需要一个好的方法。我还记得,在Orkut,一个已经死了的社交网站,你可以让用户运行一些脚本窃取他的cookie,即使用户已经注销,也可以使用你的账号。

所以这是最好的方法。

  • 在用户上创建一个cookie,hashing用一些盐调用用户ID 它是用户令牌。

  • 在您的数据库存储中,令牌及其所属的用户 到期日。

  • 现在,当用户使用他的cookie访问时,只需检查数据库中是否存在哈希并将访问者记录下来。

  • 当用户注销时,只需从数据库中删除该令牌。

More information

答案 1 :(得分:-1)

例如,在设置$_SESSION['user_id']的同时设置Cookie。像这样:

$token = hash('md5',$_SESSION['user_id'] . time() . 'salt');
setcookie('token', $token, time() + (3600 * 24 * 30));
setcookie('user_id', $_SESSION['user_id'], time() + (3600 * 24 * 30)); // Cookie expires in 30 days

$token保存在user_id行的DB中。

然后为已保存Cookie的用户设置$_SESSION['user_id'],以便他们无需以正常方式登录:

if (!isset($_SESSION['user_id']) {

    if (isset($_COOKIE['user_id']) && isset($_COOKIE['token']) {

       $saved_token = SELECT token FROM users table WHERE userID = $_COOKIE['user_id'];
         if ($_COOKIE['token'] == $saved_token) { 
         $_SESSION['user_id'] = $_COOKIE['user_id'];
       } else log out
       }
}  else log out
}
}

也许这样可以更好地保证安全性?