2012-08-02 491 views
0

我的網站使用簡單的登錄系統爲用戶名和登錄會話創建一個cookie。如果有人訪問home.php並且登錄會話設置爲登錄狀態,它們將被推送到登錄區域。否則,他們使用簡單的表單和處理程序頁面登錄。要註銷用戶點擊一個鏈接,把他們帶到logout.php其中包含以下代碼:會話銷燬/註銷奇數問題

<? 

session_start(); 

setcookie(username, $username, time()-360000); 

session_start($_SESSION['login']); 
$_SESSION["Login"] = "no"; 

header("Location: home.php"); 
session_destroy(); 

?> 

這裏是正在發生的事情。單擊註銷按鈕的用戶將被正確地踢出到頁面home.php。如果他們刷新頁面,他們仍然在home.php頁面上。目前看來很好。

但是,如果他們遠離主頁導航,它們將被帶入登錄區域。如果他們轉到登錄區域的URL,他們不會被踢出(因爲會話檢查腳本確認會話值已設置爲登錄)。

我傻眼了。我不是一個PHP專業版雖然 - 我做錯了什麼?

回答

0

要使會話無效,您只需要刪除您的cookie。

setcookie("username", "", time()-360000); 

會完成這項工作。請注意,用戶名應該用引號",否則它不會引用cookie名稱。

所以你在註銷代碼就會像下面

<? 
    session_start(); 
    setcookie("username", "", time()-3600); 
    header("Location: home.php"); 
?> 

當用戶登錄並驗證你需要爲他們設定一個cookie,然後將其重定向到您的驗證網址

也需要檢查你在每一頁的開始餅乾在你的驗證區域像下面

<? 
    session_start(); 
    if (!isset($_COOKIE["username"])) 
     header("Location: home.php"); 
?> 

希望這有助於

Here是另一個設置,使用和刪除Cookie的示例