Frage

Im Problem, die Etag Einstellung auf einen Browser des Benutzers zuverlässig. Wenn ein Benutzer klickt auf einem meiner externen Links, würde ich den Artikel-ID in ihre Etag setzen möchte (ich benutze auch Cookies, aber id wie ETAG zu experimentieren speziell mit der Zuverlässigkeit zu testen).

Wenn die gleichen Benutzer wieder auf meiner Seite ein paar Stunden / Tage später würde Ich mag Lage sein, den Etag Wert zu lesen und für Dinge zu verwenden.

kann ich ein Etag auf dem ersten Klick festgelegt, aber wenn der Benutzer den Wert Etag zurückgibt, ist verschwunden. Ich gehe davon aus seinem abgelaufenen oder so etwas. Hier ist der Code, den ich versucht haben:

<?

$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);

?>
War es hilfreich?

Lösung

Sie sollten Ihre etag in doppelte Anführungszeichen (als Link Codler zeigt erwähnt) werden Verpackung:

'"' . $etag . '"'

Ich glaube nicht, ist es wahrscheinlich, Ihr Problem zu lösen, aber Sie wollen wahrscheinlich

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

statt

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

Ab PHP 5.4 gibt es einen besseren Weg, dies zu tun mit http_response_code :

http_response_code(304);

Außerdem müssen Sie für die üblichen Verdächtigen zu stoppen Header überprüft? Unicode-Byte-Order Marker ist sehr ärgerlich mit diesem. (Disregard wenn Sie andere Header sehen Sie selbst sind Einstellung)

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top