Note:
無論是通過調用函數 session_start() 手動開啓會話, 還是使用配置項 session.auto_start 自動開啓會話, 對於基於文件的會話數據保存(PHP 的默認行爲)而言, 在會話開始的時候都會給會話數據文件加鎖, 直到 PHP 腳本執行完畢或者顯式調用 session_write_close() 來保存會話數據。 在此期間,其他腳本不可以訪問同一個會話數據文件。
對於大量使用 Ajax 或者併發請求的網站而言,這可能是一個嚴重的問題。 解決這個問題最簡單的做法是如果修改了會話中的變量, 那麼應該儘快調用 session_write_close() 來保存會話數據並釋放文件鎖。 還有一種選擇就是使用支持併發操作的會話保存管理器來替代文件會話保存管理器。
session_unset();釋放當前在內存中已經創建的所有$_SESSION變量,但不刪除session文件以及不釋放對應的session id
session_destroy() ;刪除當前用戶對應的session文件以及釋放session id,內存中的$_SESSION變量內容依然保留。
爲了徹底銷燬會話,比如在用戶退出登錄的時候,必須同時重置會話 ID。 如果是通過 cookie 方式傳送會話 ID 的,那麼同時也需要 調用setcookie() 函數來 刪除客戶端的會話 cookie。
<?php
// 初始化會話。// 如果要使用會話,別忘了現在就調用:
session_start();
// 重置會話中的所有變量
$_SESSION = array();
// 如果要清理的更徹底,那麼同時刪除會話 cookie
// 注意:這樣不但銷燬了會話中的數據,還同時銷燬了會話本身
if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] );}
// 最後,銷燬會話session_destroy();
?>