本思路就是使用用户标识(user_id
或user_name
)+登录标识(token
),将他们存到用户浏览器的Cookie里,把token存入数据库,然后相比较是否相同即可。
1.在用户第一次登录的时候,将user_id
和token
存入cookie,token
存入用户表。
$_SESSIONS['auth'] = $user;
$rememberToken = md5(uniqid(rand(), TRUE));
$rememberMe = $userId . ':' . $rememberToken;
$pass = '1234';
$method = 'des-ede3';
$encryptRememberMe = openssl_encrypt($rememberMe, $method, $pass);
setcookie('remember_me', $encryptRememberMe, time() + 15 * 86400 );
2.用户每次打开网站时验证登录状态
$rememberMeCookie = $_COOKIE["remember_me"];
if (!isset($_SESSION['auth']) && $rememberMeCookie) {
$pass = '1234';
$method = 'des-ede3';
$rememberMe = openssl_decrypt($rememberMe, $method, $pass);
list($userId, $rememberToken) = explode(':', $rememberMe);
if (!empty($user) && $user['remember_token'] === $rememberToken) {
$SESSIONS['auth'] = $user;
}
}
3.用户退出登录时记得删除cookie
setcookie('remember_me', '', time() - 3600 );
unset($_SESSION['auth']);
session_destroy();
至此就完成了「 记住我」的功能,cookie使用了可逆的加密,就算被别人破解了,后面还会去验证token是否与数据库里面的一致,这样安全性相对而言就高一些了