1

私は今日、自分のサイトの構築を続けていましたが、テストに行くたびに、自分のサイトで自分のアカウントにログインし続けなければならないことに気付きました.30 日で期限切れになるように Cookie を設定しない限り、これは正常なことですが、何らかの理由で「彼らが適切に仕事をしているとは思わない。残念ながら、問題を解決するための十分な知識を持っていない。ログイン時に Cookie を設定するコードを次に示します。さらに情報が必要な場合はお知らせください。 .

$encryptedID = base64_encode("g4enm2c0c4y3dn3727553$id");
setcookie("idCookie", $encryptedID, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days
setcookie("passCookie", $pass, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days

そのすぐ上にあるいくつかのコード(役立つ場合があります)

if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){
        // Pleae note: Adam removed all of the session_register() functions cuz they were deprecated and
        // he made the scripts to where they operate universally the same on all modern PHP versions(PHP 4.0  thru 5.3+)
        // Create session var for their raw id
        $user_id = $row["user_id"];   
        $_SESSION['user_id'] = $user_id;
        // Create the idx session var
        $_SESSION['idx'] = base64_encode("g4p3h9xfn8sq03hs2234$id");
        // Create session var for their username
        $login_username = $row["login_username"];
        $_SESSION['login_username'] = $login_username;
        // Create session var for their password
        $login_userpass = $row["login_password"];
        $_SESSION['login_userpass'] = $login_userpass;
        $sql_login = mysql_query("SELECT no_of_logins FROM users WHERE user_id='$user_id'");
        $array = mysql_fetch_assoc($sql_login);
        $no_of_logins = $array['no_of_logins'];
        //$sql_login_check = mysql_num_rows($sql_login);
        if($no_of_logins == "0"){
            mysql_query("UPDATE users SET first_login=now() WHERE user_id='$user_id' LIMIT 1");
        }
        mysql_query("UPDATE users SET last_login=now() WHERE user_id='$user_id' LIMIT 1");
        mysql_query("UPDATE users SET online = '1' WHERE user_id='$user_id' LIMIT 1");
        mysql_query("UPDATE users SET no_of_logins = no_of_logins + 1 WHERE user_id='$user_id' LIMIT 1");
        mysql_query("UPDATE system SET total_logins = total_logins + 1");
        mysql_query("UPDATE system SET no_online = no_online + 1");
    } // close while
    // Remember Me Section
    $encryptedID = base64_encode("g4enm2c0c4y3dn3727553$id");
    setcookie("idCookie", $encryptedID, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days
    setcookie("passCookie", $pass, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days
    // All good they are logged in, send them to homepage then exit script
    header("Location: profile.php");
    exit();
} else { // Run this code if login_check is equal to 0 meaning they do not exist
    $loginErrorMsg = "Incorrect login data, please try again";
    $errorDisplay = '';
}

助けてくれてありがとう

4

3 に答える 3

2

次の点を除いて、コードに多くの問題はありません。

time() + 60*60*24*100

それは 30 日ではなく 100 日後のことです :)

アップデート

セッション Cookie は応答ヘッダーに明示的な有効期限が設定されていないため、ブラウザを閉じると有効期限が切れるのは正常です。

これこそが、永続的な Cookie を作成する理由です。セッションの有効期限が切れた場合 (または存在しない可能性が高い場合)、新しいセッションにそれらの Cookie から収集したデータを入力する必要があります。

于 2012-06-08T17:10:05.620 に答える
1

セッションの有効期限と Cookie の有効期限は別のものです。PHP セッションを 30 日間に設定しないでください。デフォルトは 1 時間 (おそらく 30 分) です。必要なのは、ユーザーがサイトに来て特別な Cookie を持っている場合に、ユーザーを自動的に再度ログインさせる (PHP セッションを再起動する) 方法です。

于 2012-06-08T17:12:12.517 に答える
0

私の記憶が正しければ、Cookie がまだブラウザに存在していても、構成されたセッション タイムアウト時間が経過した後でも、セッションはタイムアウトします (制限されたサーバー リソースを解放する...これは良いことです)。

PHP セッションのタイムアウトを参照してください

たとえば、(期待した 30 日間ではなく) 20 分間非アクティブ状態が続いた後にセッション タイムアウトが表示されますか? または、ログインしてブラウザーを閉じ、ブラウザーを開き、サイトにアクセスしようとするとすぐにタイムアウトしますか?また?

于 2012-06-08T17:09:35.980 に答える