最近我已經注意到很多空白會話正在創建,但我不確定爲什麼,但我相信我正在以正確的方式做所有事情。通過登錄系統生成的PHP空會話文件
目前,我們創建一個會話當用戶要麼日誌中或寄存器,我們再檢查用戶是否與一個isset($_COOKIE['auth'])
屬於登錄或註冊過程中創建的會話登錄。
如果該cookie存在,我們開始一個會話,這有助於避免爲未註冊用戶啓動數千個會話並創建大量會話文件。
會話設置:
PHP文件
session_save_path("/home/user/sessions");
session_set_cookie_params("86400", "/");
session_name("auth");
的php.ini
session.gc_maxlifetime = 90000
session.cookie_lifetime = 90000
session.use_trans_sid = 0
session.use_only_cookies = 1
創建登錄會話(成功登錄)
session_start();
session_regenerate_id(true);
$_SESSION['userId'] = $userId;
$_SESSION['created'] = time();
session_write_close();
header("Location: $_SERVER[HTTP_REFERER]");
檢查會話是否應恢復
然後檢查是否根據是否啓動會話或不爲用戶auth
會話cookie已設置。
如果用戶已經註冊或登錄之前,它只會設置:
if(isset($_COOKIE['auth'])){
session_start();
session_write_close();
}
檢查用戶登錄
要檢查如果用戶在我們登錄然後使用功能:
function isAuthenticated(){
if (!isset($_SESSION['userId']))
return false;
else
return true;
}
註銷
function logOut(){
session_start();
session_destroy();
setcookie('auth', "", 0);
unset($_SESSION);
unset($_COOKIE['auth']);
return true;
}
出於某種原因,雖然我獲得了大量的會話中的空文件夾(文件大小0)會議文件。
這些來自哪裏?
是否session_regenerate_id(true)
創建新的會話文件並保留舊的會話文件爲空?這是我能想到空會話文件的唯一原因嗎?
是的,它應該由gc更好地處理,但是如果你調用一個創建會話ID的函數,你正在創建一個會話。只要調用session_destroy,如果他們沒有通過身份驗證。 – Anthony
'session.auto_start = 0'? –
您應該考慮通過'foreach'將unset($ _ SESSION)'更改爲迭代,以便分別取消設置每個元素。 [PHP文檔說](http://www.php.net/manual/en/function.session-unset.php#refsect1-function.session-unset-notes):「小心:不要取消設置整個$ _SESSION與未設置($ _ SESSION),因爲這將禁止通過$ _SESSION超全局註冊會話變量。「 –