PHP会话登录记住我

时间:2012-08-23 12:48:22

标签: php login

我有一个使用PHP Sessions的PHP注册/登录系统,它工作得很好,我希望用户能够记住我,然后他们会永远登录或者至少一周或者其他什么。

我猜我需要存储一个cookie并检查,我对我实际需要存储在cookie中的内容感到困惑。如果我存储用户标识或用户名,那么有人只能使用假cookie来查看其他用户数据吗?

任何进步都表示赞赏。

3 个答案:

答案 0 :(得分:24)

您需要做的就是扩展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具有随机值并将其内容存储在文件系统中,因此您应该没问题。

答案 1 :(得分:17)

成功登录后执行:

$_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();
}

答案 2 :(得分:-6)

我经常使用的小例子

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;
    }
}
相关问题