2013-07-16 87 views
0

我試圖在互聯網和堆棧溢出看我的問題,但沒有找到解決我的問題的答案。所以我有一個我爲一個開源項目創建的網站的後端系統。我現在剛剛完成將所有內容傳輸到我的在線域和數據庫。在解決了很多其他問題之後,它現在可以工作,除了註銷外。PHP註銷將無法在線工作

在我的後端頭我有以下網址

<a href="logout.php"><h1>Logout</h1></a> 

logout.php頁面的內容如下:

<?php 
session_regenerate_id(); 
session_start(); 
session_unset(); 
$_SESSION = array(); 
session_destroy(); 

header("Location: login.php"); 
?> 

離線,通過甲基苯丙胺這工作沒有任何問題。但是,它不會破壞我的會話。我仍然可以訪問我的所有會話變量,這使我能夠保持登錄狀態。正如我之前所說的,我試圖尋找答案,但我似乎找不到解決我的問題的答案。如果任何人有線索可能是錯誤的,請告訴我。提前致謝!

編輯: 這是我如何檢查每個後端頁面上,用是否我登錄:

function sec_session_start() { 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = false; // Set to true if using https. 
    $httponly = true; // This stops javascript being able to access the session id. 

    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies. 
    $cookieParams = session_get_cookie_params(); // Gets current cookies params. 
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
    session_name($session_name); // Sets the session name to the one set above. 
    session_regenerate_id(true); // regenerated the session, delete the old one. 
    session_start(); // Start the php session 
} 

正如你看到的,@paulprogrammer,我做了什麼與餅乾。我在註銷時如何銷燬它?

編輯(2):paulprogrammer用於指針

確定感謝。我從我的登錄檢查功能中刪除了Cookie部分,並將其轉換爲以下簡單功能:

function sec_session_start() { 
session_start(); 
} 

這不會創建cookie,現在它可以工作。我試圖通過官方php manul所說的@http://php.net/manual/en/function.session-destroy.php來取消cookie的設置,但那並沒有。所以這就是爲什麼我轉向更簡單的方法。由於除我以外沒有多少人會使用後端,因爲它似乎工作正常,即使沒有cookie,我也稱它完成了。本主題可以被關閉:)

最終編輯(3): 好感謝* @paulprogrammer它與cookies現在工作爲好。現在我知道答案了,你必須這樣做似乎是合乎邏輯的。我愚蠢。好吧,顯然我必須設置會話的名稱,就像我在會議中所做的一樣。我一開始就這樣做,在我開始之前。新的,更新日誌的檢查功能代碼:

<?php 
session_name('sec_session_id'); 
session_start(); 
setcookie(session_name(), '', 100); 
session_unset(); 
session_destroy(); 
$_SESSION = array(); 

header("Location: login.php"); 
?> 
+0

您正在查看** cookie **值而不是** session **值的任何機會? – PaulProgrammer

+0

@PauProgrammer我認爲你可能在正確的方向。檢查我的原始帖子的編輯是否有更新。 – GlenDC

+0

嘗試在註銷腳本中執行'session_name($ session_name);',否則PHP將僅銷燬默認會話cookie。 – PaulProgrammer

回答

0

你在你的設置代碼設置會話名稱,但未能將其設置在拆解代碼。所以,在拆卸期間,PHP正在銷燬默認會話名稱,而不是您的自定義會話名稱。自定義會話名稱在註銷後仍然可用。

只要堅持用session_name()功能的任何地方正在使用會話操作,保證了會話管理始終作用於正確的會話令牌。

在您的登出。php:

<?php 
session_name('sec_session_id'); 

session_regenerate_id(); 
session_start(); 
session_unset(); 
$_SESSION = array(); 
session_destroy(); 

header("Location: login.php"); 
?>