سؤال

هناك طرق مختلفة للحفاظ على حالة المستخدم المستخدمة في تطوير الويب.

هذه هي الأشياء التي يمكنني التفكير فيها الآن:

  1. سلسلة الاستعلام

  2. بسكويت

  3. طرق النموذج (الحصول على ونشر)

  4. حالة العرض (ASP.NET فقط على ما أعتقد)

  5. الجلسة (خادم ويب InProc)

  6. الجلسة (خادم الويب المخصص)

  7. الجلسة (قاعدة البيانات)

  8. الثبات المحلي (Google Gears) (شكرًا Steve Moyer) إلخ.

أعلم أن كل طريقة لها مزاياها وعيوبها مثل عدم أمان ملفات تعريف الارتباط ووجود حد لطول QueryString وكونها قبيحة المظهر!;)

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

ما أود معرفته هو ما هي الطريقة (الطرق) التي تستخدمها بشكل عام وتوصي بها أو الأكثر إثارة للاهتمام أي من هذه الطرق ترغب في تجنبها في سيناريوهات معينة ولماذا؟

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

المحلول

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

  • تكون حالة سلسلة الاستعلام مفيدة فقط للمهام الأساسية - على سبيل المثال، ربما الحفاظ على موضع المستخدم داخل المعالج، أو توفير مسار لإعادة توجيه المستخدم إليه بعد إكمال مهمة معينة (على سبيل المثال، تسجيل الدخول).بخلاف ذلك، فإن حالة سلسلة الاستعلام غير آمنة إلى حد كبير، ويصعب تنفيذها، ومن أجل تحقيق العدالة، يجب ربطها ببعض أجهزة الحالة من جانب الخادم من خلال احتوائها على مفتاح لربط العميل بحالة الخادم التي تم الحفاظ عليها لذلك العميل.
  • حالة ملف تعريف الارتباط هي نفسها تقريبًا - إنها أكثر روعة من حالة سلسلة الاستعلام.ولكن لا يزال يتم الحفاظ عليه بالكامل من جانب العميل ما لم تكن البيانات الموجودة في ملف تعريف الارتباط مفتاحًا لربط العميل ببعض أجهزة الحالة من جانب الخادم.
  • حالة طريقة النموذج متشابهة مرة أخرى - إنها مفيدة لإخفاء الحقول التي تربط نموذجًا معينًا ببعض البيانات في النهاية الخلفية (على سبيل المثال، "يقوم هذا المستخدم بتحرير السجل رقم 512، لذا سيحتوي النموذج على مدخلات مخفية بالقيمة 512 ").إنه ليس مفيدًا لأشياء أخرى كثيرة، ومرة ​​أخرى، فهو مجرد تطبيق آخر لنفس الفكرة وراء سلسلة الاستعلام وحالة ملف تعريف الارتباط.
  • تعتبر حالة الجلسة (بأي من الطرق التي تصفها) رائعة، نظرًا لأنها قابلة للتوسيع بشكل لا نهائي ويمكنها التعامل مع أي شيء يمكن للغة البرمجة التي اخترتها التعامل معها.التحذير الأول هو أنه يجب أن يكون هناك مفتاح في يد العميل لربط هذا العميل بحالته المخزنة على الخادم؛هذا هو المكان الذي توفر فيه معظم أطر عمل الويب إما مفتاحًا يعتمد على ملف تعريف الارتباط أو مفتاحًا يعتمد على سلسلة الاستعلام إلى العميل.(تستخدم كل واحدة حديثة تقريبًا ملفات تعريف الارتباط، ولكنها ترجع إلى سلاسل الاستعلام إذا لم يتم تمكين ملفات تعريف الارتباط.) التحذير الثاني هو أنك تحتاج إلى وضع بعض الأفكار في كيفية تخزين حالتك...هل ستضعه في قاعدة البيانات؟هل يتعامل إطار الويب الخاص بك مع الأمر بالكامل نيابةً عنك؟مرة أخرى، معظم أطر عمل الويب الحديثة تستخلص العمل من هذا، ولكي أبدأ في تنفيذ جهاز الحالة الخاص بي، أحتاج إلى جداً سبب جيد...بخلاف ذلك، من المحتمل أن أقوم بإنشاء ثغرات أمنية وتعطل وظيفي تم تجزئته بمرور الوقت في أي من الأطر الناضجة.

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

نصائح أخرى

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

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

مع الاستخدام المتزايد للويب 2.0، أعتقد أن هناك طريقتين مهمتين مفقودتين من قائمتك:

8 تطبيقات AJAX - بما أنه لا يتم إعادة تحميل الصفحة ولا توجد صفحة للتنقل بين الصفحات، فإن الحالة ليست مشكلة (ولكن يجب أن تستخدم بيانات المستخدم المستمرة مكالمات XML غير المتزامنة).

9 الاستمرارية المحلية - يمكن للتطبيقات المعتمدة على المتصفح الاحتفاظ ببيانات المستخدم الخاصة بها وحالتها على محرك الأقراص الثابتة المحلي باستخدام مكتبات مثل Google Gears.

أما بالنسبة لأيهما الأفضل، فأعتقد أن لكل منهما مكانه، لكن طريقة سلسلة الاستعلام تمثل مشكلة بالنسبة لمحركات البحث.

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

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

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

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

أتمنى أن أعرف ذلك قبل أن أبدأ...

في صحتك، روب.

كن حذرًا بشأن الحالة التي تخزنها من جانب العميل (سلاسل الاستعلام، وحقول النموذج، وملفات تعريف الارتباط).لا ينبغي تخزين أي شيء متعلق بالأمان من جانب العميل، باستثناء ربما معرف الجلسة إذا كان محجوبًا بشكل معقول ويصعب تخمينه.هناك عدد كبير جدًا من مواقع الويب التي تحتوي على إعدادات مثل "authenticated=true" وتقوم بتخزينها في ملف تعريف الارتباط أو سلسلة استعلام أو حقل نموذج مخفي.من التافه أن يتجاوز المستخدم شيئًا كهذا.تذكر أنه من الممكن أن يتم التلاعب بأي مدخلات قادمة من العميل ويجب عدم الوثوق بها.

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

إنها ليست مسألة ما يجب استخدامه وما يجب تجنبه، ولكن متى يجب استخدام أي منهما.لكل منهما ظروف معينة عندما يكون الأفضل، وظروف مختلفة عندما يكون الأسوأ.

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

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