ASP.NET Managing State Sessions- إدارة الحالة الجلسات في برمجة صفحات الويب آي إس بي
ASP.NET Managing State-
إدارة الحالة في برمجة صفحات الويب آي إس بي
بروتوكول نقل النصوص التشعبية (HTTP) هو بروتوكول يخص الحالة الغير موجودة بمعني اذا لم توجد جلسة بين جهاز العميل السيرفر سيتوقف الإرسال . عندما ينقطع العميل عن الخادم ، يتجاهل مشغل ASP.NET كائنات الصفحة. وبهذه الطريقة ، يمكن لكل تطبيق ويب رفع حجمه لتقديم طلبات عديدة في وقت واحد دون نفاد ذاكرة الخادم.
ومع ذلك ، يجب أن يكون هناك بعض التقنية لتخزين المعلومات بين الطلبات واستعادتها عند الاقتضاء. هذه المعلومات ، أي القيمة الحالية لجميع عناصر التحكم والمتغيرات للمستخدم الحالي في الجلسة الحالية تسمى الحالة او الجلسات .
ASP.NET manages four types of states:
اي اس بي تعالج ٤ انواع من الحالات او الجلسات
- View State حالة العرض
- Control State حالة التحكم
- Session State حالة الجلسة
- Application State حالة التطبيق
View State حالة العرض
حالة العرض هي حالة الصفحة وجميع عناصر التحكم الخاصة بها. يتم الاحتفاظ به تلقائيًا عبر المشاركات بواسطة إطار عمل ASP.NET.
عند إرسال صفحة مرة أخرى إلى العميل ، يتم تحديد التغيير في خصائص الصفحة وعناصر التحكم بها وتخزينها في قيمة حقل إدخال مخفي باسم _VIEWSTATE. عند إعادة نشر الصفحة ، يتم إرسال الحقل _VIEWSTATE إلى الخادم مع طلب HTTP.
يمكن تمكين حالة العرض أو تعطيلها من أجل:
- The entire application على مستوى التطبيق
- عن طريق تعيين خاصية EnableViewState في قسم
من ملف web.config. - A page على مستوى الصفحة
- عن طريق تعيين سمة EnableViewState لتوجيه الصفحة ، إذا <٪ @ Page Language = "C #" EnableViewState = "false"٪>
- A control على مستوى الأداة
- عن طريق تعيين الخاصية Control.EnableViewState.يتم تنفيذه باستخدام كائن حالة عرض تم تعريفه بواسطة فئة StateBag والذي يحدد مجموعة من عناصر حالة العرض. حقيبة الحالة عبارة عن بنية بيانات تحتوي على أزواج قيمة السمات المخزنة كسلسلة مرتبطة بالكائنات.فئة StateBag لها الخصائص التالية:
الخاصية | الوصف |
---|---|
Item(name) | قيمة عنصر حالة المشاهدة بالاسم المحدد. هذه هي الخاصية الافتراضية لفئة StateBag. |
Count | عدد العناصر في مجموعة حالة المشاهدة. |
Keys | مجموعة من المفاتيح لجميع العناصر في المجموعة. |
Values | مجموعة من القيم لجميع العناصر في المجموعة. |
الدوال التالية خاصة بالفئة المسماة بحقيبةالحالة.
The StateBag class has the following methods:
الدالة | الوصف |
---|---|
Add(name, value) | لإضافة عنصر إلى مجموعة حالة العرض ويتم تحديث العنصر الموجود. |
Clear | يزيل كل العناصر من المجموعة. |
Equals(Object) | لتحديد ما إذا كان الكائن المحدد يساوي الكائن الحالي. |
Finalize | يسمح بتحرير الموارد وإجراء عمليات التنظيف الأخرى. |
GetEnumerator | إرجاع عداد يتكرر على جميع أزواج المفاتيح / القيمة لكائنات StateItem المخزنة في كائن StateBag. |
GetType | الحصول على نوع المثيل الحالي. |
IsItemDirty | يتحقق من كائن StateItem المخزن في كائن StateBag لتقييم ما إذا كان قد تم تعديله أم لا. |
Remove(name) | يزيل العنصر المحدد. |
SetDirty | يضبط حالة كائن StateBag وكذلك خاصية Dirty لكل من كائنات StateItem الموجودة به. |
SetItemDirty | يعين الخاصية Dirty لكائن StateItem المحدد في كائن StateBag. |
ToString | إرجاع سلسلة تمثل كائن حقيبة الحالة. |
مثال Example
يوضح المثال التالي مفهوم تخزين حاله العرض. دعوانا نحافظ علي العداد ، والذي يتزايد في كل مره يتم فيها نشر الصفحة مره أخرى عن طريق النقر علي زر علي الصفحة. يظهر عنصر تحكم التسمية القيمة في العداد.
كود ملف الهتيمل كما يلي:
كود الملف كالتالي:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %> xmlns="http://www.w3.org/1999/xhtml" > runat="server">Page Counter:Untitled Page
ملاحظة عند بناء صفحة ويب في فيجوال استديو يتم انشاء ملفين الأول خاص بالواجهة الرسومية ويتم استخدام في كود الأدوات مثل مربع النص او الأزرار وهو كود النص التشعبي html اما الملف الثاني يحتوي على الكود البرمجي الذي سيقوم بالعمليات والتفاعل مع الأدوات في الصفحة الأولى
الكود البرمجي
public partial class _Default : System.Web.UI.Page { public int counter { get { if (ViewState["pcounter"] != null) { return ((int)ViewState["pcounter"]); } else { return 0; } } set { ViewState["pcounter"] = value; } } protected void Page_Load(object sender, EventArgs e) { lblCounter.Text = counter.ToString(); counter++; } }
ناتج الكود:
حالة الأداة Control State
لا يمكن تعديل حالة التحكم أو الوصول إليها مباشرة أو تعطيلها.
حالة الجلسة Session State
عندما يتصل المستخدم بموقع ويب ASP.NET ، يتم إنشاء كائن جلسة عمل جديد. عند تشغيل حالة الجلسة ، يتم إنشاء كائن حالة جلسة جديد لكل طلب جديد. يصبح كائن حالة الجلسة هذا جزءًا من السياق وهو متاح من خلال الصفحة.
تستخدم حالة الجلسة عمومًا لتخزين بيانات التطبيق مثل المخزون أو قائمة الموردين أو سجل العملاء أو عربة التسوق. يمكنه أيضًا الاحتفاظ بمعلومات حول المستخدم وتفضيلاته ، وتتبع العمليات المعلقة.
يتم تحديد الجلسات وتتبعها باستخدام SessionID 120 بت ، والذي يتم تمريره من العميل إلى الخادم والعودة كملف تعريف ارتباط أو عنوان URL معدل. تعتبر SessionID فريدة وعشوائية على مستوى العالم.
يتم إنشاء كائن حالة جلسة العمل من فئة HttpSessionState ، والتي تحدد مجموعة من عناصر حالة الجلسة.
فئة HttpSessionState لها الخصائص التالية:
الخاصية | الوصف |
---|---|
SessionID | معرف جلسة فريد. |
Item(name) | قيمة عنصر حالة الجلسة بالاسم المحدد. هذه هي الخاصية الافتراضية للفئة HttpSessionState. |
Count | .عدد العناصر في مجموعة حالة الجلسة |
TimeOut | الحصول على مقدار الوقت ، بالدقائق ، المسموح به بين الطلبات قبل إنهاء موفر حالة الجلسة الجلسة. |
لدى فئة HttpSessionState الطرق التالية:
الدوال | الوصف | ||
---|---|---|---|
Add(name, value) | يضيف عنصرًا إلى مجموعة حالة الجلسة. | ||
Clear | يزيل كل العناصر من مجموعة حالة الجلسة. | ||
Remove(name) | يزيل العنصر المحدد من مجموعة حالة الجلسة. | ||
RemoveAll | يزيل كل المفاتيح والقيم من مجموعة حالة الجلسة. | ||
RemoveAt | حذف عنصر في فهرس محدد من الجلسة- | جمع الدولة. |
كائن حالة الجلسة هو زوج بقيمة اسم لتخزين واسترجاع بعض المعلومات من كائن حالة الجلسة. يمكنك استخدام الكود التالي لنفسه:
void StoreSessionInfo() { String fromuser = TextBox1.Text; Session["fromuser"] = fromuser; } void RetrieveSessionInfo() { String fromuser = Session["fromuser"]; Label1.Text = fromuser; }
يخزن الكود أعلاه سلاسل فقط في كائن قاموس Session ، ومع ذلك ، يمكنه تخزين جميع أنواع البيانات الأولية والصفائف المكونة من أنواع البيانات البدائية ، بالإضافة إلى كائنات DataSet و DataTable و HashTable و Image ، وأيضًا مستخدم فئة المعرفة التي ترث من كائن ISerializable.
مثال Example
يوضح المثال التالي مفهوم حالة جلسة . يوجد زران على الصفحة ، مربع نص لإدخال السلسلة وتسمية لعرض النص المخزن من الجلسة الأخيرة.
كود ملف الترميز كالتالي:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> xmlns="http://www.w3.org/1999/xhtml" > runat="server">Untitled Page
style="width: 209px">
style="width: 317px"> style="width: 209px">
ناتج كود الهتيمل
الكود البرمجي The code behind file is given here:
public partial class _Default : System.Web.UI.Page { String mystr; protected void Page_Load(object sender, EventArgs e) { this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; } protected void btnstr_Click(object sender, EventArgs e) { this.mystr = this.txtstr.Text; this.Session["str"] = this.txtstr.Text; this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; } }
تنفيذ الكود
Execute the file and observe how it works:
حالة التطبيق Application State
تطبيق ASP.NET عبارة عن مجموعة من جميع صفحات الويب والرمز والملفات الأخرى داخل دليل ظاهري واحد على خادم ويب. عند تخزين المعلومات في حالة التطبيق ، تكون متاحة لجميع المستخدمين.
لتوفير استخدام حالة التطبيق ، يقوم ASP.NET بإنشاء كائن حالة تطبيق لكل تطبيق من فئة HTTPApplicationState ويخزن هذا الكائن في ذاكرة الخادم. يتم تمثيل هذا الكائن بواسطة ملف فئة global.asax.
تستخدم حالة التطبيق في الغالب لتخزين عدادات الدخول والبيانات الإحصائية الأخرى وبيانات التطبيق العالمية مثل معدل الضريبة ومعدل الخصم وما إلى ذلك ولتتبع المستخدمين الذين يزورون الموقع.
فئة HttpApplicationState لها الخصائص التالية:
الخاصية | الوصف |
---|---|
Item(name) | قيمة عنصر حالة التطبيق بالاسم المحدد. هذه هي الخاصية الافتراضية للفئة HttpApplicationState. |
Count | عدد العناصر في مجموعة حالة التطبيق. |
فئة HttpApplicationState لديها الدوال التالية:
دالة | الوصف |
---|---|
Add(name, value) | يضيف عنصرًا إلى مجموعة حالة التطبيق. |
Clear | يزيل كل العناصر من مجموعة حالة التطبيق. |
Remove(name) | يزيل العنصر المحدد من مجموعة حالة التطبيق. |
RemoveAll | يزيل كل الكائنات من مجموعة HttpApplicationState. |
RemoveAt | يزيل كائن HttpApplicationState من مجموعة حسب الفهرس. |
Lock() | لإغلاق مجموعة حالة التطبيق بحيث يمكن للمستخدم الحالي فقط الوصول إليها. |
Unlock() | يفتح مجموعة حالة التطبيق حتى يتمكن جميع المستخدمين من الوصول إليها. |
يتم الاحتفاظ بشكل عام ببيانات حالة التطبيق عن طريق كتابة معالجات للأحداث:
- Application_Start بداية التطبيق
- Application_End نهاية التطبيق
- Application_Error أخطاء التطبيق
- Session_Start بداية الجلسة
- Session_End إنهاء الجلسة
يعرض مقتطف الشفرة التالي بناء الجملة الأساسي لتخزين معلومات حالة التطبيق
:
Void Application_Start(object sender, EventArgs e) { Application["startMessage"] = "The application has started."; } Void Application_End(object sender, EventArgs e) { Application["endtMessage"] = "The application has ended."; }
التسميات: ASP.NET برمجة صفحات الويب
<< الصفحة الرئيسية