asp.net-mvc - net - upgrade mvc4 to mvc5




لا يزال موافق لاستخدام متغيرات الجلسة في ASP.NET mvc ، أو هل هناك بديل أفضل لبعض الأشياء(مثل عربة) (5)

أميل إلى استخدام ملف تعريف ارتباط مع عربة التسوق الخاصة بي المتسلسلة في base64 string ويبدو أن هذا العمل بشكل جيد

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

سؤالي هو ، ما هي أفضل طريقة لتمرير العربة؟

لقد حاولت تمرير سلة التسوق من الصفحة إلى إعادة النشر والحفاظ على جميع القيم على قيد الحياة ، ولكن في بعض الصفحات (صفحة تأكيد عنوان إرسال الفواتير) يبدو أن هذا كثيرًا من المتاعب ، كل ما أريد التحقق منه هو عنوان إرسال الفواتير ولا تريد حقًا من HiddenFor () على الصفحة لتعبئة السلة مرة أخرى

TempData [] هو ما اعتدت على المنتج إلى صفحة الخروج ، ثم تساءل هو أنه من الأفضل للحفاظ على إعداد TempData في كل وقت عندما ....

يمكنك فقط استخدام متغير جلسة؟

لسبب ما قرأت ممارسة ليست كبيرة لاستخدام الدورة ، وبالتالي السؤال.

شكرًا على إرشاداتك ، يمكنني توفير بعض الرموز / مزيد من المعلومات إذا كنت ترى أنها مفيدة.


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

والنتيجة هي أنك تتجنب تجربة المستخدم الرهيبة لفقد سلة التسوق الخاصة بك بسبب إعادة تدوير المهلة / إعادة تدوير الخادم (يتم تخفيف هذا الأخير باستخدام تخزين جلسة SQLState ، الذي أوصي به). يمكن للمستخدم العودة بعد أيام وستظل السلة موجودة هناك. ما لم يكن هذا مشكلة أمان / خصوصية ، أجد أنه الحل الأفضل.


سأستخدم الجلسة ، ما لم تكن هناك أسباب لتجنب ذلك.

على سبيل المثال ، لدي مشروع واحد حيث أجري مكالمات متكررة لإجراء MVC في الخلفية. يخدم هذا الإجراء ملفًا بطيئًا على الشبكة. اعتدت على استخدام الجلسة ، لكنني سرعان ما اكتشفت التأثير السلبي الرئيسي: لن يقوم IIS بتنفيذ مكالمات من نفس المستخدم بالتوازي ، ولكن بشكل متعاقب واحد تلو الآخر. كان لهذا تأثير كبير على الأداء ، لذلك استخدمت طريقة بديلة: أقوم بتعيين HttpContext.User.Identity إلى اسم المستخدم ، واستخدامه كمفتاح لجلب الأشياء من قاعدة البيانات. ولكن ربما يمكنك تعيينه على بعض GUID عشوائي ويكون هذا لاستبدال Sessions.


في نظام سلة التسوق ، تعتبر المنتجات التي تتم إضافتها إلى سلة التسوق مهمة جدًا ، لذا فإن استخدام الجلسة ليس فكرة جيدة من وجهة نظري. استخدام ملفات تعريف الارتباط وجدول مؤقت في قاعدة البيانات هو واحد من أفضل فكرة. يمكننا تخزين هذه البيانات إلى الأبد أو يمكن أن تتضح بعد أيام معينة.


من الجيد تمامًا استخدام الجلسات في ASP.NET MVC ، خاصة في سيناريو سلة التسوق الخاصة بك.

هناك عيوب في استخدام الجلسات ، ولكن يبدو أنها لا تنطبق على حالتك:

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

2) لا تستمر الجلسات بشكل افتراضي ، وإذا كنت تعمل على webfarm ، فأنت بحاجة إلى حفظ الجلسات في قاعدة البيانات الخاصة بك لتكون قابلة للوصول من قبل كل عقدة المزرعة. ولكن يبدو من غير المحتمل أن تتمكّن من التدرج على هذا النحو. وإذا كنت تستوفي neccessity التحجيم ، فلن تكون الجلسات هي أهم مشكلاتك.

3) تتطلب الجلسات وظائف إضافية من متصفح المستخدم (عادة ، ملفات تعريف الارتباط). ولكن جميع المتصفحات الحديثة تدعم ملفات تعريف الارتباط ، لذلك لا داعي للقلق بشأن المتصفحات الخاصة جدًا.

هناك أيضًا بعض فوائد الجلسات على المدخلات المخفية:

1) أصغر النفقات العامة. يتم تمرير ملف تعريف ارتباط جلسة صغيرة ذهابًا وإيابًا بينك وبين العميل ، بدلاً من المجموعة الكاملة من المدخلات المخفية.

2) برمجة أبسط. ليس عليك التأكد من تضمينك لإدخالاتك المخفية في كل صفحة من صفحاتك.

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





session