سؤال

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

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

المحلول

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

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

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

نصائح أخرى

ويمكنك أيضا استخدام جلسة مخصصة حفظ معالج:

http://www.php.net/ دليل / EN / function.session-وضع-حفظ-handler.php

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

وأيضا Msession، الذي اقترحهEran جالبيرين، تبدو مثيرة جدا للاهتمام كبديل لتلك التي ذكرتها من قبل.

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

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

  • إذا كنت تضع ملفات تعريف الارتباط على مضيف آخر، فكيف سيؤثر ذلك على سرعة ملفات تعريف الارتباط الخاصة بك؟من الواضح أن هذا يعتمد على عدد عمليات الكتابة/القراءات التي تقوم بها.
  • هل تفعل هذا لزيادة السرعة أم لتجاوز الفشل؟الجواب سيؤدي بالتأكيد إلى حلول مختلفة:
    • في حالة قيامك بذلك لتجاوز الفشل، كيف ستتعامل إذا لم يتمكن خادم (خوادم) الويب الخاص بك من الوصول إلى مخزن الجلسة الخاص بك بسبب تعطل ارتباط الشبكة؟ماذا لو تعطل متجر الجلسة الخاص بك؟سيتعين عليك حل هذه المشكلة باستخدام نوع ما من النسخ المتماثل الرئيسي، وربما تشغيل مخزن الجلسة الموزع هذا على نفس الجهاز مثل خادم الويب لتوفير إضافي عالي (إذا كان من الممكن احتواء جميع الجلسات في الذاكرة).القي نظرة على رياك أو ما شابه ذلك للنسخ المتماثل الرئيسي.
    • في حال كنت تفعل ذلك من أجل السرعة، فسأستخدم Apache أو nginx أو haproxy (الأسرع) لإجراء موازنة التحميل ببساطة بناءً على عنوان IP للعميل.بهذه الطريقة لن تضطر إلى الاهتمام بإعداد متجر جلسات موزع.بالتأكيد، إذا تعطلت إحدى مثيلات PHP الخاصة بك، فسيفقد المستخدمون ملفات تعريف الارتباط الخاصة بهم، ولكن ربما لا يمثل ذلك مشكلة.الأمر متروك لك.

والأسهل هو أعطها أو رديس.

وهنا هو كيف نفعل ذلك في رديس - نحن استخدامه في الوقت الحالي: http://redis4you.com/articles.php ؟ ID = 001 & اسم = رديس + + كما الجلسة + معالج + في + PHP

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