4

私は自分のシステムでwampを構成し、このローカル環境で開発兼テストを行っています。ログアウト機能に取り組んでいて、生成されているセッションIDがブラウザ内で同じであることに気づきました。

例-chromeは、ログアウトしてログインした後でも、すべてのユーザーに対して常にセッションID=abcを生成します。IEは、すべてのユーザーに対して常にセッションID=xyzを生成します。

これはwamp/私のテスト環境の問題ですか?

私のログアウトphpスクリプトの下を見つけてください-

<?php
session_start();
$sessionid = session_id();
echo $sessionid;
session_unset(); 
session_destroy(); 
?>
4

7 に答える 7

7

おそらく、古いセッションIDを含むCookieがまだ残っている可能性があります。そのCookieは削除session_unsetsession_destroy削除もされないため、次のようになります。

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッションIDも設定解除する必要があります。Cookieを使用してセッションIDを伝播する場合(デフォルトの動作)、セッションCookieを削除する必要があります。setcookie()そのために使用される可能性があります。

したがってsetcookie、ログアウト後にセッションIDCookieを無効にするために使用します。

if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

もう1つの推奨事項は、を使用した認証が成功した後、セッションIDを再生成することsession_regenerate_id(true)です。

于 2011-05-20T18:42:19.260 に答える
4

動作します。これを試してみてください

session_start(); 
session_regenerate_id(TRUE); 
session_destroy(); 
于 2012-11-29T08:54:10.807 に答える
2

session_destroy()は、現在のセッションに関連付けられているすべてのデータを破棄します。セッションに関連付けられているグローバル変数の設定を解除したり、セッションCookieの設定を解除したりすることはありません。セッション変数を再度使用するには、session_start()を呼び出す必要があります。

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッションIDも設定解除する必要があります。Cookieを使用してセッションIDを伝播する場合(デフォルトの動作)、セッションCookieを削除する必要があります。そのためにsetcookie()を使用できます。

http://php.net/manual/en/function.session-destroy.phpから取得

于 2011-05-20T18:40:07.283 に答える
2

関数を使用してセッションIDを再生成する必要がありますsession_regenerate_id()。それがないと、セッションIDはページの更新間で同じになります。

于 2011-05-20T18:35:41.863 に答える
1

session_unset()セッションCookieは削除しsession_destroy()ないでください。呼び出しで手動で設定を解除する必要がありsetcookie()ます。

session_unsetはの逆でありsession_register()、session_destroyはCookieに影響を与えることなく$_SESSIONを単純にクリーンアップします。

于 2011-05-20T18:41:17.670 に答える
1

マニュアル(session_destroy)から:

session_destroy()は、現在のセッションに関連付けられているすべてのデータを破棄します。セッションに関連付けられているグローバル変数の設定を解除したり、セッションCookieの設定を解除したりすることはありません。セッション変数を再度使用するには、session_start()を呼び出す必要があります。

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッションIDも設定解除する必要があります。Cookieを使用してセッションIDを伝播する場合(デフォルトの動作)、セッションCookieを削除する必要があります。そのためにsetcookie()を使用できます。

特にCookieの設定を解除しない限り、Cookieは引き続き存在し、次にsession_start()が呼び出されたときに、それがセッションIDとして使用されます。ブラウザを閉じるとCookieもクリアされます。これは、通常、ブラウザを閉じると期限切れになるようにphpによって設定されているためです。

于 2011-05-20T18:42:40.367 に答える
0

セッションハイジャックを停止するには、PHPで以下のコードに従ってください

    session_start();

    /* to stop session hijacking */

    // Generate new session without destroying the old one
    session_regenerate_id(false);

    // Fetch current session ID and close both sessions to allow other scripts to use them
    $newSession = session_id();
    session_write_close();

    // Assign session ID to the new one, and start it back up again
    session_id($newSession);

    session_start();
于 2017-09-14T08:11:36.820 に答える