لا يتم حذف httpcookie عند تغييرات الجلسة أو غير صالحة

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

سؤال

أنا أجلق httpcookie، وأعداد فقط الاسم والقيمة وليس خاصية تنتهي صلاحية، ثم قم بإضافة ذلك إلى الاستجابة. بسيطا بما فيه الكفاية. يتم إنشاء ملف تعريف الارتباط (ولكن لا يستمر) كما هو متوقع. المشكلة هي عندما تتغير الجلسة لسبب ما (مثل إعادة إنشاء موقع الويب، أو أعيد بناؤه في تطبيقي عند تصحيح الأخطاء) ثم يبقى ملف تعريف الارتباط في جميع أنحاء. أريد أن تكون ملف تعريف الارتباط صالحا للجلسة الأصلية فقط.

وفقا ل MSDN، تقول: "إذا لم تحدد حد انتهاء الصلاحية لملف تعريف الارتباط، فإن ملف تعريف الارتباط لا يستمر على الكمبيوتر العميل وينتهي عند انتهاء صلاحية جلسة المستخدم"

أعتقد أنني لا أعرف بالضبط ما يشمل "انتهاء صلاحية الدورة". أحصل على حذف ملف تعريف الارتباط بعد 20 دقيقة عند انتهاء الجلسة. ولكن في حالة حذف ملف تعريف الارتباط إذا كانت الجلسة التي تم إنشاؤها غير موجودة بعد الآن لأي عدد من الأسباب؟ المرة الوحيدة التي رأيتها تم حذف ملف تعريف الارتباط عند إغلاق المستخدم جميع نوافذ المستعرض ويفتح واحدة جديدة.

إذا كان هذا صحيحا، فقد تضطر إلى تخزين معرف الجلسة الأصلية ("ASP.NET_SESSIONID") في ملف تعريف الارتباط، ثم تحقق من ذلك مقابل معرف الجلسة الحالية، إذا كانت مختلفة، ثم حذف ملف تعريف الارتباط أو إنشاء واحدة جديدة.

إليك الرمز (الفرق الوحيد بين ملفات تعريف الارتباط والآخر في أمثلة MSDN هو تخزين قيم متعددة في ملف تعريف الارتباط):

giveacodicetagpre.

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

المحلول

المرة الوحيدة التي رأيتها ملف تعريف الارتباط المحذوف هو عندما يغلق المستخدم كل شيء متصفح النوافذ ويفتح واحدة جديدة.

وهذا هو بالضبط ما يعنيه MSDN عندما تقول سيتم حذف ملف تعريف الارتباط عند انتهاء الجلسة. لسوء الحظ، أعتقد أن هذا ليس ثابتا عبر المتصفحات على أي حال، لذلك لا يستخدم كثيرا لأي شخص.

يجب عليك دائما تعيين تاريخ انتهاء الصلاحية على ملفات تعريف الارتباط.

إذا كان هذا صحيحا، فقد تضطر إلى ذلك تخزين معرف الجلسة الأصلية ("asp.net_sessessionid") في ملف تعريف الارتباط، ثم تحقق من ذلك ضد الحالي معرف الجلسة، إذا كانت مختلفة، ثم حذف ملف تعريف الارتباط أو إنشاء واحدة جديدة.

أنا أكره أن أقول ذلك ولكن هذا لن يساعدك أيضا. يحب .NET Framework لإعادة تدوير معرفات الجلسة، لذلك لا يمكنك ضمان أنه سيكون مختلفا.

أخبار سيئة خارج الطريق، أود أن أنصحك بإعادة النظر في ما تحاول القيام به من وجهة نظر معمارية.

إعادة تشغيل التطبيق هو شيء يحدث بالكامل على الخادم؛ ملفات تعريف الارتباط هي شيء يحدث بالكامل على العميل. في حين أن العميل سيتحدث إلى الخادم، فهذا علاقة طلب / استجابة بحتة، لا يمكن للخادم توصيل الأحداث مثل إعادة تشغيل التطبيق إلى المتصفح.

إذا كنت ترغب في تخزين قيمة في مكان ما، وهو أمر صالح فقط لعمر جلسة الخادم، فلماذا لا تخزنه في الجلسة بدلا من ملف تعريف الارتباط؟

نصائح أخرى

أنا على علم بكل ذلك، لكنه غير آمن بما يكفي لاحتياجات عملائنا.لا يزال بإمكان الجلسة الحصول على خداع أو حقن.انظر: http://msdn.microsoft.com/en-us/مجلة / CC163730.aspx # S9

يبدو أن

يبدو أنني غادرت لإنشاء ملف تعريف ارتباط آمن منتهية الصلاحية منفصلة عن الجلسة، وحديث تاريخ انتهاء الصلاحية عندما أستطيع (أي عندما يصل المستخدم إلى صفحات معينة).

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