基本上我有一个具有基本会话功能的登录系统,它在浏览器关闭时超时。我一直在收到投诉,所以我希望能够单击“记住”勾号并让他们的会话持续 30 天。
问问题
475 次
2 回答
2
-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 回答