我有一个使用 PHP Sessions 的 PHP 注册/登录系统,它运行良好,我希望用户能够记住我,然后他们永远保持登录状态,或者至少一周或其他时间。
我猜我需要存储一个 cookie 并检查,我对我实际需要存储在 cookie 中的内容感到困惑。如果我存储用户 ID 或用户名,那么就不能有人使用假 cookie 来查看其他用户数据吗?
任何提前表示赞赏。
您需要做的就是扩展 PHP 会话 cookie。以下示例将 cookie 延长 30 天:
$params = session_get_cookie_params();
setcookie(session_name(), $_COOKIE[session_name()], time() + 60*60*24*30, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
我认为通过您的安全问题,您只关心放置容易被黑客入侵的值。PHP 会话 cookie 具有随机值并将其内容存储在文件系统中,因此您应该没问题。
登录成功后执行:
$_SESSION['user_is_loggedin'] = 1;
$cookiehash = md5(sha1(username . user_ip));
setcookie("uname",$cookiehash,time()+3600*24*365,'/','.yoursite.com');
存储在sql中:
$sql = "UPDATE `users` SET `login_session`='$cookiehash' WHERE `user_id`='$uid'";
检查用户是否登录:
function CheckCookieLogin() {
$uname = $_COOKIE['uname'];
if (!empty($uname)) {
$sql = "SELECT * FROM `users` WHERE `login_session`='$uname'";
$_SESSION['user_is_loggedin'] = 1;
$_SESSION['cookie'] = $uname;
// reset expiry date
setcookie("uname",$uname,time()+3600*24*365,'/','.yoursite.com');
}
}
if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
CheckCookieLogin();
}
我经常使用的小例子
function setSession($username,$password,$cookie=null){
// Other code for login ($_POST[]....)
// $row is result of your sql query
$values = array($username,$this->obscure($password),$row['id']);
$session = implode(",",$values);
// check if cookie is enable for login
if($cookie=='on'){
setcookie("your_cookie_name", $session, time()+60*60*24*100,'/');
} else {
$_SESSION["your_session_name"] = $session;
}
}