我正在用PHP開發一個Web應用程序,用戶可以擁有自己的帳戶,並且跟蹤用戶的會話存儲在MySQL數據庫中。現在,在搜索關於如何實現這個的答案之後,我發現許多人都喜歡使用session_destroy()
並取消設置cookie。爲什麼 - 會不會session_destroy()就足夠了?即使the PHP manual說「爲了完全殺掉會話,就像登錄用戶一樣,會話ID也必須未被設置。」在從PHP會話註銷期間取消設置Cookie的要點是什麼?
我的推理:在用戶註銷並恰好在離開之前再訪問您網站上的另一個頁面後,PHP腳本檢查用戶是否登錄會調用session_start(),設置新會話無論如何都是用戶的cookie。下面是它看起來像:當然
// here we include some scripts and make some instances we'll need
require_once("database.php");
require_once("session.php");
$database_connection = new DB_Connection();
$session = new Session($database_connection);
// here a session cookie is sent to a user, even if he or she isn't logged in
session_start();
// finally we check if the user is logged in
$log_isLogged = false;
if(isset($_SESSION['member_id'], $_SESSION['username'])){
$log_member_id = $_SESSION['member_id'];
$log_username = $_SESSION['username'];
$log_isLogged = true;
}
,它是當用戶知道這個事實,並離開現場前,一個新的cookie可以被設置好的。但是有些網站甚至會在註銷後直接將您重定向到新頁面,導致創建新的會話cookie - 取消您剛纔的操作。
我的推理是否存在某些方面的缺陷,或者,如果您沒有設置會話cookie,它是否無關緊要? 也許大多數開發人員只是認爲它至少不能傷害它來解決它?
我不是母語的人,所以我提前爲任何錯誤和語法錯誤表示歉意。
好吧,謝謝你,我會考慮這樣做 - 你知道我怎麼會去阻止這種情況的發生?也許可以在每個網頁瀏覽中更改SID,或者至少在登錄後直接更改SID? – Muuse
我明白1,3,4和5.現在讀完他們後,他們似乎很明顯。但是,我仍然不明白cookie的設置會有多大的不同,只要所有的數據在服務器端被刪除。我的意思是,當不取消cookie設置時,由於session_destroy(),所有數據在服務器端仍然會被銷燬。用戶在瀏覽器中會留下一個SID作爲cookie,當然,但是服務器無法識別的是登錄的。這有什麼害處?我會看看你提供給我的鏈接。非常感謝!! – Muuse
@laph:認爲#2是買二手手機。即使您使用自己的SIM卡,手機的IMEI也會保持不變,並且您的手機流量可以被知道IMEI的人員(例如向您出售手機的人員)捕獲。爲了保證您的會話不會被劫持,您必須更改與會話相關的所有事件,包括其ID。 –