إدارة جلسات ASP.NET [مثال]
⚡ ملخص ذكي
تتيح إدارة جلسات ASP.NET لتطبيق HTTP عديم الحالة الاحتفاظ ببيانات المستخدم عبر الطلبات. يشرح هذا المقال ViewState، وهو كائن الجلسة لتخزين أزواج المفاتيح والقيم، ويقدم مثالًا عمليًا، وأنماط حالة الجلسة، وتكوين مهلة الجلسة، ومزايا حالة الجلسة.
إدارة جلسات ASP.NET
بروتوكول HTTP الذي تعمل عليه جميع تطبيقات الويب هو بروتوكول عديم الحالة. بواسطة عديم الجنسية، فهذا يعني فقط أنه لا يتم الاحتفاظ بالمعلومات من طلب إلى آخر.
على سبيل المثال، إذا كانت لديك صفحة تسجيل دخول بها مربعان نصيان، أحدهما للاسم والآخر لكلمة المرور. عند النقر فوق زر تسجيل الدخول في تلك الصفحة، يحتاج التطبيق إلى التأكد من نقل اسم المستخدم وكلمة المرور إلى الصفحة التالية.
في ASP.Net، يتم ذلك بعدة طرق. أولها عبر مفهوم يُسمى ViewState، حيث يقوم ASP.Net تلقائيًا بتخزين محتويات جميع عناصر التحكم، ويضمن أيضًا نقلها إلى الصفحة التالية. ويتم ذلك عبر خاصية تُسمى ViewState.
ليس من المثالي أن يقوم المطور بتغيير أي شيء في حالة العرض. وذلك لأنه يجب التعامل معه بواسطة ASP.Net فقط.
كائن جلسة ASP.NET
والطريقة الأخرى هي استخدام كائن يسمى "كائن الجلسة". كائن الجلسة متاح طوال دورة حياة التطبيق. يمكنك تخزين أي عدد من أزواج القيمة الرئيسية في كائن الجلسة. لذلك، في أي صفحة، يمكنك تخزين قيمة في كائن الجلسة عبر سطر التعليمات البرمجية أدناه.
Session["Key"] = value
يُخزّن هذا القيمة في كائن جلسة، ويُستخدم جزء "المفتاح" لتسمية القيمة. يسمح هذا باسترجاع القيمة لاحقًا. لاسترجاع قيمة، يمكنك ببساطة تنفيذ الأمر التالي.
Session["Key"]
مثال على كائن جلسة ASP.NET
في مثالنا، سنستخدم كائن الجلسة لتخزين الاسم المُدخل في حقل نص الاسم في الصفحة. ثم سنسترجع هذه القيمة ونعرضها على الصفحة. لنضف الكود التالي إلى ملف Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code تفسير:-
- يأخذ السطر الأول من التعليمات البرمجية قيمة عنصر تحكم مربع النص "الاسم" ويخزنها في كائن الجلسة. بتحديد رمز Session["Name"]، فإننا نُعطي الخاصية اسمًا يُسمى "الاسم". يُسهّل تحديد اسم للخاصية استرجاعها لاحقًا.
- يسترد السطر التالي من التعليمات البرمجية القيمة المخزنة من كائن الجلسة. ثم يقوم بكتابة هذه القيمة عبر أسلوب "Response.Write" مرة أخرى إلى العميل.
- وأخيرًا، نجعل جميع عناصر التحكم في النموذج غير مرئية. إذا لم نفعل ذلك، فستظهر جميع عناصر التحكم بالإضافة إلى قيم الاستجابة معًا.
بمجرد إجراء التغييرات المذكورة أعلاه، سترى المخرجات التالية.
الإخراج:
من الناتج، يمكنك أن ترى أن قيمة جلسة الاسم تم استردادها وعرضها في المتصفح.
أوضاع حالة جلسة ASP.NET
يمكن لـ ASP.NET تخزين بيانات الجلسة في عدة مواقع، تُسمى أوضاع حالة الجلسة. يؤثر الوضع الذي تختاره على الأداء وقابلية التوسع، وعلى ما إذا كانت البيانات ستبقى محفوظة بعد إعادة تشغيل التطبيق. يقارن الجدول أدناه بين هذه الأوضاع:
| المعالم | مكان تخزين الحالة | أفضل ل |
|---|---|---|
| InProc | في ذاكرة خادم الويب (افتراضيًا) | تطبيقات الخادم الواحد؛ الأسرع، ولكنها تفقد بياناتها عند إعادة التشغيل |
| خادم الدولة | عملية خدمة حالة ASP.NET منفصلة | مزارع الويب؛ تستمر بعد إعادة تشغيل التطبيق |
| خادم قاعدة البيانات | قاعدة بيانات SQL Server | مزارع الويب التي تحتاج إلى حالة متينة وقابلة للتوسع |
| فن التأطير المتخصص | موفر مخصص تقوم بتنفيذه | متاجر متخصصة مثل Redis |
| خصم | حالة الجلسة معطلة | التطبيقات التي لا تحتاج إلى جلسات |
InProc هو الوضع الافتراضي والأسرع، ولكن بالنسبة لعمليات النشر المتوازنة الأحمال، فإن StateServer أو SQLServer يحافظ على الجلسات متاحة عبر خوادم متعددة.
كيفية ضبط مهلة الجلسة في ASP.NET
لا تدوم الجلسة إلى الأبد؛ بل تنتهي صلاحيتها بعد فترة من عدم النشاط. يمكنك ضبط مهلة الجلسة في ملف web.config باستخدام عنصر sessionState، حيث تكون قيمة المهلة بالدقائق.
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
يمكنك أيضًا ضبطه في الكود باستخدام Session.Timeout = 30;المهلة الافتراضية هي 20 دقيقة. اختيار مهلة أقصر يحرر ذاكرة الخادم بشكل أسرع ويحسن الأمان، بينما المهلة الأطول تبقي المستخدمين مسجلين الدخول لفترة أطول.
مزايا وعيوب حالة الجلسة
تُعد حالة الجلسة مريحة، ولكن لها جوانب سلبية يجب مراعاتها قبل الاعتماد عليها بشكل كبير.
المزايا:
- سهل الاستخدام لتخزين بيانات كل مستخدم على حدة، مثل بيانات المتجر.ping بيانات سلة التسوق أو بيانات تسجيل الدخول.
- يمكنه تخزين كائنات معقدة، وليس مجرد سلاسل نصية.
- يتم الاحتفاظ بالبيانات على الخادم، لذا فهي أكثر أمانًا من التخزين على جانب العميل.
العيوب:
- يستهلك وضع InProc ذاكرة الخادم ولا يمكن توسيعه عبر مزرعة خوادم الويب.
- تُفقد بيانات الجلسة عند انتهاء مهلة الجلسة أو إعادة تشغيل التطبيق (في وضع InProc).
- قد يؤدي تخزين كميات كبيرة من البيانات لكل مستخدم إلى الإضرار بالأداء تحت ضغط عالٍ.



