条件满足时缓存

问题描述:

只有在确定的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

代码中没有错误,但是存在逻辑缺陷。你如何实施“会话到期”行为?

当你使用PHP会话时,你基本上使用cookies。如果用户删除了cookie,或者如果通过销毁它来结束会话,则会丢失用户的踪迹。会话与所有会话变量一起消失,您将需要以某种方式重新创建会话。

如果不知道自己想做什么,我无法分辨太多。但要禁止用户,您最好使用登录系统。

更新:它似乎你试图禁止机器人。你不应该使用会话。你最好的选择是使用一个IP地址,并检查请求的头部以获得一个机器人标识符(如果它是一个有礼貌的机器人,它将识别自身)

+0

感谢您的回答,我会遵循您的建议:) – Stubborn 2014-10-06 18:40:16