Pergunta

Estou tendo problemas para definir o ETAG no navegador de um usuário de maneira confiável. Quando um usuário clica em um dos meus links externos, gostaria de definir o ID do artigo em seu ETAG (também uso cookies, mas gostaria de experimentar o ETAG especificamente para testar sua confiabilidade).

Quando o mesmo usuário retornar ao meu site algumas horas/dias depois, gostaria de poder ler o valor ETAG e usá -lo para coisas.

Eu posso definir um ETAG no clique inicial, mas quando o usuário retorna, o valor ETAG desaparece. Eu presumo que ele expirou ou algo assim. Aqui está o código que tenho tentado:

<?

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

?>
Foi útil?

Solução

Você deve envolver seu ETAG em cotações duplas (como mostra o Link que Codler mencionou):

'"' . $etag . '"'

Eu não acho que é provável que resolva seu problema, mas você provavelmente quer

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

ao invés de

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

A partir de Php 5.4, há uma maneira melhor de fazer isso com http_response_code:

http_response_code(304);

Além disso, você verificou os suspeitos habituais parando os cabeçalhos? Marcadores de ordem de bytes Unicode são muito irritantes com isso. (Desconsidere se você puder ver outros cabeçalhos que você está se preparando)

Outras dicas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top