2011-03-21 23 views
4

我以前用過這三條線來刪除會話:如何正確刪除一個PHP會話?

session_start(); 
session_regenerate_id(); 
session_destroy(); 

是否session_destroy()關閉會話,或者說我必須手動關閉它?

session_start(); 
session_regenerate_id(); 
$_SESSION = array(); 
session_write_close(); 

回答

1

如果你正在破壞會話那麼是不是真的需要session_write_close(),按照手冊它下面的:

會話數據通常存儲在將腳本終止而不需要調用session_write_close(),但由於會話數據被鎖定以防止併發寫入,所以任何時候只有一個腳本可以在會話上運行。

6

session_destroy刪除會話的數據被存儲在介質(文件,數據庫等),但不刪除$_SESSION陣列或餅乾,你必須做手工,包含PHPSESSID餅乾。

我通常像這樣的東西刪除會話:

foreach($_SESSION as $key => $val) 
    unset($_SESSION[$key]); 
foreach($_COOKIE as $key => $val) 
    setcookie($key, '', 1); 
session_destroy(); 


BTW,當你調用session_regenerate_id()會話的文件複製到新的文件,但舊的沒有被刪除,如果你想刪除舊的數據會話的文件(可能是你想要的),你必須用session_regenerate_id(TRUE)來指定它。

+0

刪除每個cookie(例如,如果您在當前域中使用其他Web應用程序的Cookie。你只需要刪除持有會話的cookie:'setcookie(session_name(),'',0);未設置($ _ COOKIE [會話名稱()]);' – 2014-06-01 19:40:41