2

そのため、ユーザーがログアウトした後も特定のセッション変数を保持したいと考えています。このような:

// Save the session variable
$foo = $_SESSION["foo"];

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

session_destroy();
session_regenerate_id();
//----------------------------------------------

// Restart the session
session_start();

// Store the variable in the session
$_SESSION["foo"] = $foo;

// Redirect the user to the same page, this time unauthenticated
header("Location: " . $_SERVER["REQUEST_URI"]);

しかし、リダイレクト後$_SESSION["foo"]はnullであるため、適切に保存されていないようです。

誰でもこれで私を助けることができますか?私はここで「違法」なことをしていますか?

ノート:

var_dump($_SESSION["foo"])リダイレクトの直前行うと、変数が返されます。

session_start()もちろん、取得する前に必ず呼び出します$_SESSION["foo"]

また、これが何か関係があるかどうかはわかりません$fooが、オブジェクトなので、やってい$foo = unserialize($_SESSION["foo"])ます$_SESSION["foo"] = serialize($foo);

4

1 に答える 1

2

使用している PHP のバージョンによっては、これでhttps://bugs.php.net/bug.php?id=38042の問題を説明できる可能性があります。

セッションの破棄に続いてセッションを開始しても、新しいセッションが開始されないように見えます。添付のコードは 5.1.2 では機能しますが、5.1.4 では失敗します。

他のバージョンも同様に影響を受ける可能性があります。

この投稿では、発生している動作についても説明しています。

可能な回避策は、$foo変数を次のスクリプト$_GETの場所ヘッダーの引数として次のように渡すことです。

header("Location: " . $_SERVER["REQUEST_URI"] . "?foo=" . $foo);
于 2012-04-16T06:53:56.857 に答える