1

その問題について多くの投稿がありますが、私はそれを修正できません。PHP でユーザーをログオフし、その後リダイレクトを行うために、Cookie を削除しようとしています。

    $currentCookieParams = session_get_cookie_params(); 
    session_set_cookie_params($currentCookieParams['lifetime'], '/', $currentCookieParams['domain'], $currentCookieParams['secure'], true);
    session_name("PHPAUTH");
    session_start();

    $_SESSION = array();

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

    header("Location: http://localhost/Home/Index");
    exit;

しかし、クッキーはまだそこにあります。リダイレクトを無効にすると、Cookie は正常に削除されます。ただし、リダイレクトでは、とにかく Cookie は削除されません。

その後、リダイレクトで Cookie が確実に削除されるようにするにはどうすればよいですか?

編集:

次のリクエストで、自分のコードが Cookie を再作成したようです。ユーザーがまだログオンしているかどうかを確認し、そうでない場合はログイン ページにリダイレクトします。

        $currentCookieParams = session_get_cookie_params(); 
        session_set_cookie_params($currentCookieParams['lifetime'], '/', $currentCookieParams['domain'], $currentCookieParams['secure'], true);
        session_name("PHPAUTH");
        session_start();     

        if (!array_key_exists('angemeldet', $_SESSION) || !$_SESSION['angemeldet'])
        {
            header("Location: http://localhost/Account/LogOn");
            exit;
        }

Cookie を再作成せずにこれを確認するにはどうすればよいですか? ばかげた質問かもしれませんが、私は現時点でかなり混乱しています...

4

1 に答える 1

0

header()関数は他のどのような関数よりも上になければならないと思います。私が正しく、それでもそのようなプログラミング形式が必要な場合は、次のコードが機能するかどうかを試すことができます。

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

echo '<meta http-equiv="REFRESH" content="0;url=http://localhost/Home/Index">';
exit;

ただし、もちろん、そうしたい場合に限ります。<meta http-equiv="REFRESH" content="0;url=http://localhost/Home/Index">例を挙げただけで、あなたの構文と組み合わせてうまくいくかどうかはわかりません。

于 2013-04-07T10:48:46.440 に答える