2011-12-14 52 views
0

我有一個Web應用程序,我正在爲一個學校項目開發,我遇到了註銷頁面的問題。當用戶點擊退出,將它們發送到logout.php剛剛看起來是這樣的:Chrome中的PHP會話問題

<?php include ("includes/check_authorization.php"); 
    // Unset the session and destroy it 
    session_unset(); 
    session_destroy(); 

    // Redirect to the home page 
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">'; 
    exit; 
?> 

這是非常簡單的,但它會取消設置,然後銷燬會話,並重定向到索引,這是登錄頁面。但是,當這個運行時,索引immedietley重定向到用戶主頁。如果在$ _SESSION中未設置和匹配用戶名和ID,則頂部包含的check_authorization頁面將重定向某人登錄,所以這意味着它是爲我設置的?我真的很困惑這是怎麼發生的。我正在使用CAS進行身份驗證。

編輯:check_authorization.php還初始化會話以及檢查這些鍵值

+0

[元刷新?真的嗎?](http://www.php.net/manual/en/function.header.php) – DaveRandom 2011-12-14 16:52:43

+0

向我們展示check_authorization.php代碼。也許這裏有一個邏輯錯誤。 – Khronos 2011-12-14 23:33:28

回答

1

對於像我這種情況也如下,這是爲我工作的所有瀏覽器,

@session_unset(); 
$old_sessid = @session_id(); 
@session_regenerate_id(); 
$new_sessid = session_id(); 
@session_id($old_sessid); 
@session_destroy(); 
0

而不是僅僅取消設置數據,儘量分配虛擬價值的會議,如:

$_SESSION['authKey'] = '!!INVALID!!'; 
session_unset(); 
session_destroy(); 

即使會話「復甦」,該認證不能POSS由於「假」數據而再次成功。

0

有一些可能性:

  • 最簡單的可能性:你包括

    在session_start();

上面的文件?包含文件之前?我以前去過那裏,生氣了。

  • 第二種可能性:儘量把

    session_regenerate_id();

位於文件最上方(在聲明session_start();之前)。因爲在某些服務器託管中,他們的配置仍然使用「LINUX」風格,我無法在這裏向您解釋。但重點是他們在重定向時總是使用「緩存」。換句話說,當你重定向到另一個頁面時,你總是重定向到你的「緩存」頁面。看......這裏很難爲你解釋。但只要嘗試session_regenerate_id();代碼,也許它會工作。

  • 我從來沒有使用「回聲」的東西做重定向的東西。試試:

    header(「location:index.php」); 我不知道這個工作與否。我只是簡單地根據我的假設給你分析。

希望這些幫助。 :)