2013-04-07 93 views
0

关于该问题有很多帖子,但我无法修复它。我试着以注销在PHP用户删除一个cookie,做一个重定向算账: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随后被重定向删除?

编辑:

好像我自己的代码重新创建的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的情况下检查此问题?也许一个愚蠢的问题,但我很困惑的时刻...

+0

很可能会在下一个请求中再次设置会话cookie? – Gerry 2013-04-07 11:04:26

+0

如何在(我猜是index.php)http:// localhost/Home/Index的文件看起来像? – bestprogrammerintheworld 2013-04-07 11:38:50

+0

localhost/Home/Index不仅是一个文件,它是MVC引擎的一部分。控制器Home的操作索引视图在“布局”页面中呈现。但我用普通的网址进行了测试,问题仍然存在。 – tklepzig 2013-04-07 12:01:05

回答

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">与你的语法相结合,会起作用。

+1

只有在输出缓冲关闭的情况下,你的假设才是真实的。 – haim770 2013-04-07 11:05:12