這是我init.php
是什麼樣子是在整個網站加載:如何有效地處理PHP會話?
$suid = 0;
session_set_cookie_params(60, '/', '.' . $_SERVER['HTTP_HOST'], true);
session_save_path(getcwd() . '/a/');
if (!isset($_SESSION['id'])) {
session_start(['cookie_lifetime' => 60]);
$_SESSION['id'] = session_id();
$_SESSION['start'] = date('d_m_Y_H_i');
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
} elseif (isset($_SESSION['uid'])) {
$suid = $_SESSION['uid'];
}
我目前正在測試PHP會議,所以我只是把60秒的壽命。
我想知道爲什麼有會議創建,因爲沒有人知道該域名,所以我加了ip
。我看着它,發現了這一點:
所以這是谷歌爬蟲機器人。由於那裏有更多的搜索引擎和機器人,我不想將這些抓取保存在會話文件中,並用它填充我的網站空間。
所以我的問題是:
1)即使在測試生命週期價值(60秒)結束後,會議文件保留在自定義目錄。我讀這是因爲我設置了一個自定義目錄。這是真的?
2)刪除所有未使用/過期的會話文件的有效方法是什麼?我應該添加一個時間戳$_SESSION['last_activity']
並讓cronjob查看我的自定義目錄,獲取會話文件數據並計算過期會話以刪除它?
3)我是否應該避免由那些漫遊器抓取工具保存那些不需要的會話,只在$_SERVER['HTTP_HOST']
內尋找字符串「bot」,還是有更好的方法來識別「非人類訪問者」/抓取工具?
我也很欣賞任何改進/建議,我的代碼在頂部。我之前剛剛造成了一些Internal Server Error
,因爲我從php-fpm-slow
-logs中可以看出session_start()
經常被調用。
哇。感謝您的詳細解答!我不知道它不會立即發生。我沒有跟蹤我的自定義目錄,但它似乎永遠不會被刪除。所以你建議使用'filemtime()'來檢測上次修改文件的時間?關於設置沒有登錄用戶的會話並使用自定義目錄:我通過同一服務器上的兩個不同域發送Ajax請求,並使用會話獲取保存在會話變量中的正確語言代碼。也在註冊表格內(3個步驟)。是否應該用常規cookie取代以避免在沒有登錄用戶的情況下使用會話? – AlexioVay
對此第二條評論抱歉,只是想澄清一下:ajax和自定義目錄問題是關於檢測正確的會話來引用該域。沒有設置保存目錄,我找不到另一種方法。 – AlexioVay
是的,一個簡單的cookie對於簡單的語言標識符來說並不算什麼。會話用於私人數據和身份驗證 - 您不需要選擇顯示語言。 :) – Narf