Pregunta

Im teniendo problemas para configurar la ETag en el navegador de un usuario de forma fiable. Cuando un usuario hace clic en uno de mis enlaces externos, me gustaría establecer el ID de artículo en su Etag (i utilizar cookies también, pero como seria experimento con Etag específicamente para probar su fiabilidad).

Cuando el mismo usuario vuelve a mi sitio un par de horas / días más tarde, me gustaría ser capaz de leer el valor de ETag y utilizarlo para la materia.

Me puede establecer un eTag en el clic inicial, pero cuando el usuario devuelve el valor de ETag se ha ido. Asumo su caducada o algo así. Aquí está el código que he estado intentando:

<?

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

?>
¿Fue útil?

Solución

Se debe embalar sus etag entre comillas dobles (como el enlace Codler mencionó shows):

'"' . $etag . '"'

No creo que sea probable que resolver su problema, pero es probable que desee

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

en lugar de

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

A partir de PHP 5.4 hay una mejor manera de hacer esto con http_response_code :

http_response_code(304);

Además, tiene usted marcó para los sospechosos habituales de parada cabeceras? Unicode de orden de bytes marcadores son muy molesto con esto. (Haga caso omiso si se puede ver otras cabeceras que se está instalando)

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top