ما مقدار البيانات التي يمكنك/ينبغي تخزينها في كائن جلسة المستخدمين؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

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

هل مقدار ذاكرة الخادم/مساحة قرص خادم SQL هو القيد الوحيد على مقدار ما يمكنني تخزينه في جلسات المستخدمين أم أن هناك شيئًا آخر أحتاج إلى مراعاته؟

يحرر:الموقع مبني على نماذج الويب ASP.NET.

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

المحلول

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

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

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

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

نصائح أخرى

يمكنك أيضًا الحصول على صفحة asp واحدة تحتوي على نموذج html بأكمله، وإخفاء أجزاء منه حتى يقوم المستخدم بملء الجزء المرئي و"إرساله"...

ثم قم ببساطة بإخفاء الجزء الذي تم ملؤه وإظهار الجزء التالي من النموذج...

سيكون هذا أمرًا سهلاً للغاية في إطار عمل .NET، واستخدم اللوحات لكل "خطوة معالج" وأضف المنطق عند عرض كل لوحة وإخفائها.

سيكون لديك بعد ذلك جميع البيانات في صفحة واحدة.

إذا كنت تستخدم نموذج HTTP التقليدي (أي.لا تستخدم runat = "server")، يمكنك نشر البيانات إلى صفحة ASP أخرى ووضع البيانات المنشورة في عناصر نموذج مخفية، ويمكنك القيام بذلك لأي عدد من الصفحات التي تحتاجها وبالتالي تجنب وضع أي شيء في متغير الجلسة.

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

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

حقول النموذج المخفية هي الإجابة التي أحبها أكثر.

هناك طرق أخرى لاستمرار الحالة.ملفات تعريف الارتباط أو النافذة المنبثقة أو مجموعة الإطارات أو إطارات iframe.

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