6

ユーザーのブラウザで Etag を確実に設定するのに問題があります。ユーザーが外部リンクの 1 つをクリックすると、記事 ID を Etag に設定したいと考えています (私も Cookie を使用していますが、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);

?>
4

2 に答える 2

5

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 バイト オーダー マーカーは、これに非常に悩まされます。(自分で設定している他のヘッダーが表示される場合は無視してください)

于 2010-08-12T09:18:41.327 に答える
-3

Etag はあまり信頼できません http://developer.yahoo.com/performance/rules.html#etags

于 2010-08-12T08:41:22.257 に答える