سؤال

أواجه مشكلة في ضبط ETAG على متصفح المستخدم بشكل موثوق. عندما ينقر المستخدم على أحد الروابط الخارجية الخاصة بي ، أود تعيين معرف المقالة في ETAG الخاص به (أستخدم ملفات تعريف الارتباط أيضًا ، ولكن معرفًا أرغب في تجربة 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 مزعجة للغاية مع هذا. (تجاهل إذا كنت تستطيع رؤية رؤوس أخرى ، فأنت تحدد نفسك)

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top