كيفية تجاهل الورنيش ، وليس حذف ملفات تعريف الارتباط [مغلقة

StackOverflow https://stackoverflow.com/questions/4273734

  •  28-09-2019
  •  | 
  •  

سؤال

أريد استخدام الورنيش لتخزين بعض الصفحات حتى في وجود ملفات تعريف الارتباط. هناك 3 إمكانيات أحتاج إلى رعاية:

  1. المستخدم المجهول هو عرض بعض الصفحة
  2. يقوم المستخدم بتسجيل الدخول إلى عرض بعض الصفحة بتخصيص الضوء. يتم تخزين جميع هذه التخصيصات في كوكي موقّع ويتم ملؤها ديناميكيًا بواسطة JavaScript. لم يتم تعيين رأس اختلاف http.
  3. يقوم المستخدم المسجل بعرض بعض الصفحة ببيانات مخصصة من قاعدة البيانات. تم تعيين رأس اختلاف cookie http.

ستكون السلوكيات المتوقعة:

  1. ذاكرة التخزين المؤقت للصفحة. هذا هو السيناريو الأساسي للورنيش للتعامل معه.
  2. قم بتنقطب الصفحة ولا تحذف ملف تعريف الارتباط لأن بعض منطق JavaScript يحتاج إليها.
  3. لا تقم أبدًا بتخزين هذه الصفحة لأن Vary-Cookie يشير إلى أن محتويات ملفات تعريف الارتباط ستؤثر على إخراج هذه الصفحة.

لقد قرأت بعض المستندات على الورنيش ولا يمكنني معرفة ما إذا كان هذا هو السلوك الافتراضي أو إذا كان هناك بعض الإعدادات التي يجب علي القيام بها في VCL لتحقيق ذلك.

هل كانت مفيدة؟

المحلول

الجلسات فقط هي فريدة من نوعها لكل عميل ، وليس بالضرورة ملفات تعريف الارتباط.

ما تريده أمر منطقي وممكنه مع الورنيش ، فهي مجرد مسألة صياغة VCL الخاصة بك بعناية. يرجى الانتباه إلى الأجزاء التالية من default.vcl:

sub vcl_recv {
    ...
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
      return (pass);
    }
}


sub vcl_hit {
    if (!obj.cacheable) {
        return (pass);
    }
    ...
}


sub vcl_fetch {
    if (!beresp.cacheable) {
        return (pass);
    }
    if (beresp.http.Set-Cookie) {
        return (pass);
    }
    ...
}

عليك أن تحل محل هذه الأجزاء بالمنطق الخاص بك ؛ أي تحديد وظائف VCL_ الخاصة بك. افتراضيًا ، فإن الطلبات (VCL_RECV) والاستجابات (VCL_Fetch) مع ملفات تعريف الارتباط ليست قابلة للتخطيط. أنت تعرف تطبيقك الخلفي بشكل أفضل ويجب إعادة كتابة منطق التخزين المؤقت العام لهذه الحالة المحددة. أي أنه يجب تحديده في هذه الحالة يقوم الورنيش بإجراء بحث أو تمرير أو تسليم.

في حالتك ، سيكون لديك صفحات (الحالة 1 و 2) بدون ملف تعريف ارتباط تختلف ، والتي سيتم تشكيلها ومشاركتها من قبل الجميع (طلبات مع/بدون ملفات تعريف الارتباط) ؛ فقط لا تمانع في req.http.cookie في vcl_recv. لن أقوم بتخزين صفحات (الحالة 3) مع ملف تعريف ارتباط تختلف-أو على الأقل ليس لفترة طويلة ، حيث لا يمكن مشاركتها على الإطلاق ؛ قم بـ "تمريرة" في VCL_Fetch.

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