web-dev-qa-db-ja.com

PHP Sessions Login with remember me

PHPセッションを使用したPHP登録/ログインシステムがあり、これは完全に機能しています。週か何か。

Cookieを保存して確認する必要があると思うので、実際にCookieに保存する必要があるものに混乱しました。ユーザーIDまたはユーザー名を保存すると、誰かが偽のCookieを使用して別のユーザーデータを見ることができませんか?

事前に感謝します。

25
Exoon

必要なのは、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はランダムな値を持ち、その内容をファイルシステムに保存するため、問題ありません。

24
Luke

ログインに成功したら:

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