1

この問題の正確な原因に取り組むのにしばらく時間がかかりましたが、ここで何が起こっているようです:

セッションがあります。現在のセッションを完全に終了し、白紙の状態の新しいセッションでゼロから始めたいと考えています。

だからこれは私がすることです:

public function unregister_session()
{
    // I COMMENTED THOSE SECTIONS THAT I WASNT SURE WHAT THEY WERE DOING, BUT PROBLEM PERSISTS.
    //session_regenerate_id();
    //$params = session_get_cookie_params();
        // setcookie(session_name(), '', time() - 42000,
            // $params["path"], $params["domain"],
            // $params["secure"], $params["httponly"]);
    unset($_SESSION);
    $_SESSION=array();
    echo '<br> destroying session. old SID:'.session_id(); //echos 'qqhu7on0n...'
    session_unset();
    session_destroy();
    echo '<br> limbo SID:'.session_id(); //echos nothing.
    session_start();
    echo '<br> new SID:'.session_id();  //echos 'qqhu7on0n...'
}   

さて、私が起こるべきだと思うのは、新しいセッションがあるということです。少なくとも私が$_SESSION.

しかし、session_id をエコーするたびに、古いセッション ID が返されます。$_SESSION に値を書き込むと、それらは次のページに引き継がれず、代わりに次のページ$_SESSIONは空です!

編集: スクリプトの複数の場所 (上から下) で session_id() をエコーし​​ます。常に同じ session_id が表示されます。Google 開発者ツールで Cookie を確認すると、PHPSESSID の別の ID が表示されます。次のページで session_id() をエコーし​​ようとしているときに表示される正確な ID が表示されます...

なぜこれが起こっているのですか?session_id() を取得して、古いセッション ID ではなく、新しいセッション ID を表示するにはどうすればよいですか? NEW $_SESSION 変数に値を書き込んで、実際に次のページに引き継がれるようにするにはどうすればよいですか?

編集 - ソリューション

public function unregister_session()
{
    // DUNNO IF THE COMMENTED SECTIONS MAKE A DIFFERENCE
    //$params = session_get_cookie_params();
        // setcookie(session_name(), '', time() - 42000,
            // $params["path"], $params["domain"],
            // $params["secure"], $params["httponly"]);
    unset($_SESSION);
    $_SESSION=array();
    echo '<br> destroying session. old SID:'.session_id(); //echos 'qqhu7on0n...'
    session_unset();
    session_destroy();
    echo '<br> limbo SID:'.session_id(); //echos nothing.
    session_start();
    session_regenerate_id(TRUE); //THIS DOES THE TRICK! Calling it after session_start. Dunno if true makes a difference.
    echo '<br> new SID:'.session_id();  //echos '7b2jn...' :-)
}   
4

2 に答える 2

1

チェックアウト、http://php.net/manual/en/function.session-regenerate-id.php

session_regenerate_id()

于 2013-11-02T02:49:12.113 に答える
0

その関数を呼び出しているページで session_start を呼び出していることを確認してください。また、Cookie を破棄するためのコードのコメントを外します。これにより、キャッシュされたデータに関する奇妙な問題を防ぐことができます。

于 2013-11-02T02:49:50.210 に答える