سؤال

هل من الممكن لـ ASP.NET الخلط بين المستخدم المرتبط ومتغير الجلسة على الخادم؟هل ترتبط متغيرات الجلسة بشكل ثابت بالمستخدم الأصلي الذي أنشأها عبر الزمان والمكان والبعد؟

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

المحلول

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

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

نصائح أخرى

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

ما هو السلوك الذي تراه؟وهل أنت متأكد من عدم وجود أي ثبات في المتغيرات التي تتحدث عنها؟

بينما كل شيء ممكن....

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

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

إنه غير ممكن.ترتبط الجلسات بالمبدع.

هل تريد الخلط، أو هل لديك حالة عندما تبدو مختلطة؟

معلومات اكثر:

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

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

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

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

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

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

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