質問

ユーザーのブラウザにETAGを確実に設定するのに苦労しています。ユーザーが外部リンクのいずれかをクリックすると、記事IDをETAGに設定したいと思います(Cookieも使用しますが、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バイトオーダーマーカーは、これで非常に迷惑です。 (自分で設定している他のヘッダーを見ることができる場合は無視)

他のヒント

ETAGはそれほど信頼できませんhttp://developer.yahoo.com/performance/rules.html#etags

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top