2014-10-06 119 views
0

只有在確定的PHP會話被設置時,我才需要緩存頁面。
要做到這一點,我使用下面的代碼:條件滿足時緩存

session_start(); 
if(isset($_SESSION['bot'])){ 
$etagFile = md5_file(__FILE__); 
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 31556926) . " GMT"); 
header("Etag: $etagFile"); 
header('Cache-Control: private'); 
die('You\'ve been banned.'); 
} 
echo 'Some content'; 

的問題是,當會話到期,用戶將看到「某些內容」,而他應該看到「您已經被禁止」的一年。
error_reporting(E_ALL);不返回任何東西。
可能是什麼問題?

+1

如果機器人決定使用'$ _SESSION'變量,將無法有效地工作只需關閉cookies – sjagr 2014-10-06 18:32:16

+0

@sjagr你是對的,沒有想到它。只要使用簡單的驗證方法檢測到殭屍程序,就會運行緩存消息的腳本,但我計劃緩存機器人嘗試訪問的每個頁面的警告。好像我將不得不尋找其他解決方案。感謝您指出:) – Stubborn 2014-10-06 18:35:19

回答

1

代碼中沒有錯誤,但是存在邏輯缺陷。你如何實施「會話到期」行爲?

當你使用PHP會話時,你基本上使用cookies。如果用戶刪除了cookie,或者如果通過銷燬它來結束會話,則會丟失用戶的蹤跡。會話與所有會話變量一起消失,您將需要以某種方式重新創建會話。

如果不知道自己想做什麼,我無法分辨太多。但要禁止用戶,您最好使用登錄系統。

更新:它似乎你試圖禁止機器人。你不應該使用會話。你最好的選擇是使用一個IP地址,並檢查請求的頭部以獲得一個機器人標識符(如果它是一個有禮貌的機器人,它將識別自身)

+0

感謝您的回答,我會遵循您的建議:) – Stubborn 2014-10-06 18:40:16