0

基本上我有一个具有基本会话功能的登录系统,它在浏览器关闭时超时。我一直在收到投诉,所以我希望能够单击“记住”勾号并让他们的会话持续 30 天。

4

2 回答 2

2

如前所述,这可以通过 cookie 来完成。有很多教程,但一个好的方法对于安全性是必要的。我还记得,在 Orkut,这个早已死去的社交网站,你可以要求用户运行一些脚本来窃取他的 cookie,并且即使用户已经注销,该帐户也是你的。

所以这是一个最好的方法。

  • 在用户上创建一个 cookie,用一些盐对用户 ID 进行哈希处理,称之为用户令牌。

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

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

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

更多信息

于 2012-08-12T02:52:04.500 回答
-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 行。

然后$_SESSION['user_id']为保存了 cookie 的用户设置 ,这样他们就不必以正常方式登录:

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
}
}

也许这在安全方面更有效?

于 2012-08-12T02:34:25.367 回答