PHP:重定向失败前删除cookie

时间:2013-04-07 10:29:07

标签: php session redirect cookies

关于这个问题有很多帖子,但我无法修复它。我尝试删除cookie以便在PHP中注销用户并在之后进行重定向:

    $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?

修改

似乎我自己的代码在下一个请求中重新创建了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的情况下检查此内容?也许是一个愚蠢的问题,但我现在很困惑......

1 个答案:

答案 0 :(得分: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">与你的语法结合起来是否有效。