سؤال

أقوم بتطوير تطبيق Java EE على الويب باستخدام الدعامات. المشكلة هي مع التخزين المؤقت لـ Internet Explorer. إذا قام المستخدم بتسجيل الخروج ، فيمكنه الوصول إلى بعض الصفحات لأنه يتم تخزينه مؤقتًا ولم يتم تقديم أي طلب. إذا ضربت تحديثه ، فهذا يعمل بشكل جيد. أيضًا إذا ذهب المستخدم إلى صفحة تسجيل الدخول مرة أخرى ، فلن يعيد توجيهه لأن تلك الصفحة تم تخزينها مؤقتًا أيضًا.

حلان يتبادرا إلى ذهني:

  1. كتابة اعتراض (مرشح servlet مثل) لإضافة إلى رأس الاستجابة لا تكرار الخلاش وما إلى ذلك.
  2. أو أو وضع <meta> العلامات في كل صفحة.

أي واحد يجب أن أفعل؟

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

المحلول

بدلاً من ذلك قم بتعيين الرؤوس التالية على HttpServletResponse من الصفحات (الصفحات) المعنية بحيث لا تحتاج إلى نهرها على جميع الصفحات يدويًا:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

هذا يعادل ضبط رؤوس التعريف التالية في الصفحة (الصفحات) يدويًا:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

انظر أيضا هذا الجواب. لا تنسى مسح ذاكرة التخزين المؤقت للمتصفح قبل الاختبار ؛)

نصائح أخرى

لقد وجدت ما يلي للعمل بشكل جيد:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

من العلامات في هذا السؤال ، يبدو أنك تستخدم الدعامات. يتيح لك Struts 1.x القيام بذلك من خلال التكوين في Struts-Config.xml عن طريق الإعداد nocache="true" على ال controller عنصر:

<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />

مارك نوتنغهام تخزين مؤقت تعليمي هو أفضل مورد رأيته على الويب حول HTTP والتخزين المؤقت إذا كنت تتطلع إلى فهم المزيد.

ومع ذلك ، بناءً على المشكلة التي تراها قد تكون مشكلة في تاريخ المتصفح. يرى هنا لمزيد من المعلومات حول ذلك.

يبدو أن IE <9 سيظل ذاكرة التخزين المؤقت حتى لو كان لديك pragma: عدم وجود آثار في الرأس وتعيين المتصفح على التحديث في كل تحميل صفحة. تحتاج إلى إضافة علامات التعريف مرة أخرى في قسم الرأس الثاني قبل إغلاق HTML. هذا هو الصحيح من مرض التصلب العصبي المتعدد نفسه.

http://support.microsoft.com/kb/222064/

تفسير أفضل قليلاً هنا

http://www.htmlgoodies.com/beyond/reference/article.php/347281/so-you-dont-want-to-cache-huh.htm

من الاختبار ، تحتاج أيضًا إلى انتهاء الصلاحية: -1 علامة التعريف لجعلها تعمل. يوصى باستخدام انتهاء صلاحية: -1 وليس 0.

أضف TAG TYPE = "زر" إلى زر الإجراء الفعلي.

تعتمد القيمة الافتراضية لسمة النوع على وضع توافق المستند الحالي. القيمة الافتراضية هي إرسال. في أوضاع التوافق الأخرى ، يكون الزر القيمة الافتراضية. عند تقديم عنصر الزر في نموذج ، تعتمد القيمة على وضع توافق المستند الحالي. Windows Internet Explorer 8 وبعد ذلك. تعتمد القيمة الافتراضية لسمة النوع على وضع توافق المستند الحالي. في وضع معايير IE8 ، يتم إرسال القيمة الافتراضية. في أوضاع التوافق الأخرى والإصدارات السابقة من Windows Internet Explorer ، فإن القيمة الافتراضية هي الزر. Internet Explorer 8 وبعد ذلك. عند تقديم عنصر الزر في نموذج ، تعتمد القيمة على وضع توافق المستند الحالي. في وضع IE8 ، يتم تقديم سمة القيمة. في أوضاع المستندات الأخرى والإصدارات السابقة من Internet Explorer ، يتم تقديم قيمة النص الداخلي.

http://msdn.microsoft.com/en-us/library/ie/ms535211(v=vs.85).aspx

تعديل الرؤوس مع عدم وجود آذان وما إلى ذلك. إنها الطريقة المعتادة.

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