有人說使用unset($_SESSION["..."])
,有的說session_unset()
,有的說$_SESSION = array()
,有的說session_destroy()
,我說「看在上帝的份上,這個東西越來越讓人困惑,有人可以請我解釋一下,這是登錄用戶的正確/安全的方式嗎? out「和什麼用於什麼?如何在PHP中過期用戶的會話?
讚賞...
有人說使用unset($_SESSION["..."])
,有的說session_unset()
,有的說$_SESSION = array()
,有的說session_destroy()
,我說「看在上帝的份上,這個東西越來越讓人困惑,有人可以請我解釋一下,這是登錄用戶的正確/安全的方式嗎? out「和什麼用於什麼?如何在PHP中過期用戶的會話?
讚賞...
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
?>
的,僅僅說session_unset()
是停留在PHP的版本過時了的 - 函數的被廢棄了很長一段時間了。
這個問題的確切答案取決於你的代碼用來確定某人是否「登錄」v。s。某人「退出」。
如果你有一個你的代碼尋找的單一的$_SESSION['logged_in'] = true
,那麼爲什麼取消它呢?只需將其設置爲false
並且boom ...用戶已註銷。
我在[手冊](http://uk3.php.net/manual/en/function.session-unset.php)中沒有看到'session_unset()'被棄用的引用 - 你能引用這個嗎? ? – megaflop
session_unset與session_register相反,不推薦使用。所有會話可變操作都應該直接在$ _SESSION上完成,並將其視爲一個常規數組。 –
感謝您的信息。 TBH,我從來沒有使用'session_unset()'並且總是使用'$ _SESSION = array()'清除會話變量,因爲手冊中說我們應該:-) - 仍然,我看到'session_unregister()'_is_標記爲已棄用在手冊中,但沒有'session_unset()'的通知。 – megaflop
session_destroy - 銷燬註冊到會話
session_unset所有數據 - 免費所有會話變量
http://www.php.net/manual/en/book.session.php
我見過用的最多的是給他們打電話順序。
session_unset();
session_destroy();
$_SESSION = array();
這裏是實體之間的差異
可以在會話
unset($_SESSION['shape']);
這將消除會話中的所有變量刪除一個變量,而不是會議本身
session_unset();
這會破壞會話變量
session_destroy();
首先,session_destroy()
是不一樣的其他方法。這將破壞服務器上的當前會話數據,但不會取消設置任何變量。它只是session_start()
的對應部分。
session_unset()
是deprecated相當於做$_SESSION = array()
。後者和unset($_SESSION["..."])
只有在unset()
路由只會取消設置一個會話變量([...]
中的一個)時纔會有所不同。切勿執行unset($_SESSION)
,因爲這會干擾會話機制本身。
如果使用session_destroy()
然後在瀏覽器中的cookie也cleard(和probbley一個新的會話之後被創建)
本人來說,我使用一個對象(或多個)以跟蹤不同的東西(如public loggedIn = False;
和功能女巫actally登錄用戶)
session_unset()是方便,如果你想保持coockie,但你最終會與SOLU服務器
'session_destroy()'對cookie不做任何事情 - 它刪除服務器上存儲的會話數據(即用於存儲會話變量的臨時文件)。它用於保持服務器端的乾淨,而不會過度依賴垃圾收集器。要刪除cookie,您需要將其值設置爲空字符串,並將其到期時間設置爲過去的時間。 – megaflop
+1更多的空會話和RTM參考。 –
但是,爲什麼我們沒有使用'session_destroy()'來取消所有的$ _SESSION。 'session_destroy()'不會刪除所有的變量和數據? – Tarik
當我們調用'session_start()''$ _SESSION'數組從服務器上的會話文件加載到RAM時 - 這是會話變量在請求之間保存的位置。 'session_destroy()'會刪除會話文件。它並不清除'$ _SESSION'數組。 – megaflop