即时消息具有麻烦在用户的浏览器设置的Etag可靠。当我的外部链接一个用户点击,我想文章ID设置为自己的Etag(我用的饼干太多,但喜欢用ID来Etag的专门试验,以测试其可靠性)。

在同一用户返回到我的网站在几个小时/天之后,我想是能够读取ETag值,并用它的东西。

我可以在初始点击设置一个ETag,但是当用户返回ETag值不见了。我认为它过期或东西。这里是我一直在试图的代码:

<?

$time = 1280951171;
$lastmod = gmdate('D, d M Y H:i:s \G\M\T', $time);
$etag = '123';


$ifmod = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $lastmod : null; 
$iftag = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] == $etag : null; 

if (($ifmod || $iftag) && ($ifmod !== false && $iftag !== false)) { 
    header('HTTP/1.0 304 Not Modified'); 
} else {
    header("Last-Modified: $lastmod"); 
    header("ETag: $etag");
}

print_r($_SERVER);

?>
有帮助吗?

解决方案

您应该换用双引号您的etag(为纽带Codler提到所示):

'"' . $etag . '"'

我不认为这是有可能解决你的问题,但你可能想

header('Not Modified',true,304);

,而不是

header('HTTP/1.0 304 Not Modified');

随着PHP 5.4的有一个更好的方式与 http_response_code做到这一点

http_response_code(304);

另外,你检查的通常的嫌疑人停止头? Unicode字节顺序标记是非常讨厌这一点。 (无视,如果你可以看到其他标题你就把自己)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top