Domanda

Im che ha l'impostazione della Etag sul browser di un utente in modo affidabile guai. Quando un utente fa clic su uno dei miei link esterni, vorrei impostare l'articolo id nella loro Etag (io uso i cookie troppo, ma id piace sperimentare con l'ETAG appositamente per testare la sua affidabilità).

Quando lo stesso utente ritorna al mio sito un paio di ore / giorni successivi, vorrei essere in grado di leggere il valore Etag e usarlo per roba.

è possibile impostare un Etag sul clic iniziale, ma quando l'utente restituisce il valore Etag è andato. Presumo sua scaduto o qualcosa del genere. Ecco il codice che ho provato:

<?

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

?>
È stato utile?

Soluzione

Si dovrebbe essere avvolgendo l'etag tra virgolette (come il link Codler citato spettacoli):

'"' . $etag . '"'

Io non credo che sia in grado di risolvere il problema, ma probabilmente si desidera

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

anziché

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

A partire da PHP 5.4 c'è un modo migliore per fare questo con http_response_code :

http_response_code(304);

Inoltre, avete controllato per i soliti noti arresto intestazioni? Unicode Byte-Order Marker sono molto fastidioso con questo. (Tralasciare se si può vedere altre intestazioni ti stai impostando)

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top