2013-04-07 36 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