جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
State Management در ASP. NET 2.0 (بخش هشتم)
-(57 Body) 
State Management در ASP. NET 2.0 (بخش هشتم)
Visitor 2248
Category: کامپيوتر

State Management در ASP. NET 2.0 (بخش هشتم)
آنچه تاكنون گفته شده است :

 بخش اول

 مفاهيم اوليه

:

 ضرورت مديريت state در برنامه هاي وب

 بخش دوم  

 view state   

:  نحوه ايمن سازي اطلاعات ذخيره شده در view state
 بخش سوم  

view state

: نحوه نگهداري Member Variables و اشياء سفارشي
 بخش چهارم

cross-page posting

: انتقال اطلاعات از يك صفحه به صفحه اي ديگر
 بخش پنجم

cross-page posting

: نحوه دريافت اطلاعات  از صفحه مبداء
 بخش ششم

Query String

:  نحوه انتقال اطلاعات بين صفحات
 بخش هفتم  كوكي هاي سفارشي : نحوه عملكرد كوكي هاي سفارشي

در اين بخش به بررسي Session State  خواهيم پرداخت .

مفاهيم و چالش ها
در مدت زمان حيات يك برنامه به مواردي برخورد مي كنيم كه لازم است جهت ذخيره سازي اطلاعات از امكانات پيشرفته تري استفاده گردد . به عنوان مثال ، يك برنامه ممكن است به ذخيره اطلاعات پيچيده اي نظير اشياء سفارشي داده و استفاده از آنها در ساير صفحات نياز داشته باشد . ارسال اينگونه اطلاعات از طريق كوكي و يا يك query string مشكل و يا غيرممكن است . علاوه بر اين ، در برخي موارد ملاحظات امنيتي در رابطه با داده وجود دارد  و نمي توان اطلاعات مربوط به يك سرويس گيرنده را در view state و يا كوكي ذخيره كرد .
در چنين مواردي مي توان از امكانات از قبل تعبيه شده session state در ASP.NET استفاده كرد .
مديريت session state يكي از ويژگي هاي برجسته ASP.NET است كه به كمك آن مي توان هر نوع داده ئي را در حافظه سرويس دهنده ذخيره كرد . بدين ترتيب ، يك سطح حفاظتي مطلوب در خصوص داده ايجاد خواهد شد چراكه اطلاعات براي سرويس گيرنده ارسال نخواهند شد و براي هر جلسه كاري منحصربفرد مي باشند .
هر سرويس گيرنده اي كه به برنامه دستيابي داشته باشد داراي يك session متفاوت و مجموعه اي از اطلاعات متمايز و مختص به خود است . session state براي ذخيره اطلاعاتي نظير آيتم هاي خريداري شده توسط كاربر از يك سايت و استقرار آنها در سبد خريد در زمان حركت از يك صفحه به صفحه ديگر بسيار مفيد و موثر واقع مي شود .
با استفاده از session state مي توان اطلاعات مورد نظر را از طريق يك صفحه ذخيره و در ساير صفحات از آنها استفاده كرد .
با اين كه session state بسياري از مشكلات در ارتباط با ساير روش هاي مديريت state را برطرف نموده است ولي خود نيز داراي چالش هاي مختص به خود است . به عنوان مثال ، با بكارگيري روش فوق در برنامه هاي وب ، سرويس دهنده وب ملزم به ذخيره اطلاعات بيشتري در حافظه سرويس دهنده خواهد شد.  اين موضوع مي تواند همزمان با افزايش كاربران يك برنامه بر روي كارآئي آن تاثير بگذارد . چراكه درصد استفاده از يك منبع محدود ( حافظه ) افزايش خواهد يافت .  بنابراين ، لازم است استفاده از session state  با دقت و بررسي تمامي جوانب كار صورت پذيريد .

معماري session
 مديريت session به عنوان بخشي از استاندارد HTTP محسوب نمي گردد . بنابراين لازم است كه ASP.NET عمليات بيشتري را به منظور پيگيري اطلاعات session انجام دهد .
ASP.NET هر session را از طريق يك شناسه 120 بيتي منحصربفرد پيگيري و از يك الگوريتم اختصاصي براي توليد آن استفاده مي نمايد .  بنابراين حداقل اين تضمين از لحاظ تئوري ايجاد مي گردد كه عدد توليد شده منحصر بفرد بوده و به اندازه كافي تصادفي است  تا امكان و يا احتمال تشخيص و حدس آن توسط مهاجمان به حداقل مقدار خود برسد ( مهاجمان با بكارگيري روش هائي موسوم به مهندسي معكوس در تلاش جهت آگاهي از اين موضوع هستند كه يك سرويس گيرنده خاص از چه شناسه اي براي session استفاده مي نمايد ) . 
شناسه ، تنها اطلاعات مبادله شده بين سرويس دهنده وب و سرويس گيرنده است . زماني كه سرويس گيرنده شناسه session خود را  ارائه مي نمايد ، ASP.NET  در اولين اقدام جستجو جهت يافتن session متناظر با آن را انجام مي دهد . در صورتي كه ماحصل فرآيند فوق مثبت باشد ، داده از state server بازيابي و به اشياء مورد نظر تبديل مي گردد . در ادامه ، اشياء فوق در يك مجموعه خاص استقرار مي گردند تا امكان دستيابي به آنها از طريق كد وجود داشته باشد . فرآيند فوق بطور اتوماتيك انجام مي شود . 
شايد براي شما اين سوال مطرح شده باشد كه ASP.NET ، اطلاعات مربوط به session را در چه مكاني ذخيره و چگونه آنها را serialize و deserialize مي نمايد ؟ در  ASP كلاسيك ، session state به عنوان يك شي COM پياده سازي شده است كه در كتابخانه asp.dll  مستقر مي گردد . در ASP.NET ، اينترفيس برنامه نويسي تقريبا" يكسان است ولي نحوه پياده سازي آن با ASP كلاسيك كاملا" متفاوت است .
زماني كه ASP.NET يك درخواست HTTP را بررسي مي نمايد ، آن را از طريق مجموعه اي از مدول هاي مختلف كه قادر به واكنش در خصوص رويدادهاي برنامه مي باشند ، به حركت در مي آورد . SessionStateModule ، يكي از مدول هاي موجود در اين زنجيره است ( موجود در namespace با نام  System.Web.SessionState ) . مدول فوق شناسه session را توليد ، داده session را از ارائه دهندگان خارجي state بازيابي و داده را  به درخواست مورد نظر نسبت مي دهد . همچنين مدول فوق ، اطلاعات مربوط به session را پس از اتمام پردازش صفحه ، ذخيره مي نمايد.
توجه داشته باشيد كه مدول SessionStateModule عملا" داده session را ذخيره نمي نمايد . در واقع ، داده session در عناصر مجزاء نگهداري مي گردد كه به آنها state provider مي گويند .
شكل 1 معماري session state در ASP.NET را نشان مي دهد .  

معماري session state در ASP.NET
شكل 1 : معماري session state در ASP.NET

نكته آخر در ارتباط با معماري فوق نحوه پيگيري كوكي از يك درخواست به درخواست ديگر است . براي اين كه session state به درستي كار كند ، سرويس گيرنده مي بايست شناسه session خود را همراه با هر درخواست ارائه نمايد . بدين منظور از دو روش مختلف استفاده مي گردد .

  •  استفاده از  كوكي : در اين حالت ، شناسه session از طريق يك كوكي خاص  (ASP.NET_SessionId) كه ASP.NET بطور اتوماتيك و در زمان استفاده از مجموعه session آن را ايجاد مي نمايد ، ارسال مي گردد . گزينه فوق به صورت پيش فرض انتخاب مي گردد و مشابه رويكردي است كه از آن در نسخه هاي اوليه ASP  استفاده مي گرديد .

  •  استفاده از URLs اصلاح شده : در اين حالت ، شناسه session از طريق يك URL اصلاح شده خاص ارسال مي گردد . گزينه فوق يك ويژگي جديد در ASP.NET است و به پياده كنندگان اجازه مي دهد در مواردي كه سرويس گيرنده از كوكي حمايت نمي نمايد ، از session state در برنامه هاي وب استفاده نمايند .

استفاده از session state
با استفاده از كلاس  System.Web.SessionState.HttpSessionState  كه در يك صفحه ASP.NET به عنوان شي session از قبل تعبيه شده پيش بيني شده است ، مي توان با session state ارتباط برقرار كرد . نحوه اضافه كردن و بازيابي داده در مجموعه session state همانند  view state است .
مثلا" مي توان يك Dataset را در session قرار داد . كد زير نحوه انجام اين كار را نشان مي دهد .

 Session("ds") = ds

كد زير نحوه بازيابي و تبديل داده ذخيره شده در session را نشان مي دهد .

 ds = Ctype(Session("ds"),DataSet)

امكان دستيابي به session state در تمامي برنامه و براي كاربر جاري امكان پذير است . session state به دلايل متعددي ممكن است از بين رود :

  • بستن و فعال كردن مجدد مرورگر توسط كاربر

  • دستيابي به صفحه مشابه از طريق يك پنجره جداگانه مرورگر توسط كاربر

  • اتمام تاريخ اعتبار session به دليل عدم فعاليت كاربر در يك بازه زماني خاص   ( مقدار پيش فرض 20 دقيقه )

  • خاتمه دادن به عمر مفيد يك session از طريق كد و توسط برنامه نويس  ( استفاده از متد Session.Abandon)

در دو مورد اول ، session همچنان در حافظه باقي خواهد ماند چراكه سرويس دهنده وب از بستن مرورگر و يا تغيير پنجره توسط كاربر آگاهي ندارد . در چنين مواردي ، session آخرين لحظات عمر خود را در حافظه طي مي نمايد و عملا" غيرقابل دسترس باقي مي ماند تا زماني كه عمر آن به اتمام رسد .
علاوه بر موارد فوق ، زماني كه application domain مجددا" ايجاد گردد ، session state حذف خواهد شد . فرآيند فوق در زمان بهنگام سازي برنامه و يا تغيير در تنظيمات پيكربندي انجام مي شود .
همچنين به منظور حصول اطمينان از صحت عملكرد برنامه ، application domain بطور ادواري بازسازي مي شود . در صورتي كه رويكرد فوق باعث بروز مسائلي مي گردد ، مي توان اطلاعات session state را به صورت out of process ذخيره كرد ( در بخش بعد در اين رابطه توضيح خواهيم داد ) . در مدل نگهداري state به صورت out-of-process ، اطلاعات session حتي با غيرفعال شدن application domain همچنان باقي خواهند ماند .
جدول 1  ، متدها و خصلت هاي مختلف كلاس  HttpSessionState را نشان مي دهد .

member

عملكرد

 Count

 تعداد آيتم هاي ذخيره شده در مجموعه session جاري را مشخص مي كند .

 IsCookielessSession

 مشخص مي نمايد كه پيگيري session از طريق يك كوكي و يا يك URLs اصلاح شده انجام مي گيرد.

 IsNewSession

مشخص مي نمايد كه آيا session براي درخواست جاري ايجاد شده است . در صورتي كه session state حاوي داده نباشد ، ASP.NET خود را درگير پيگيري آن و يا ايجاد يك كوكي براي آن نمي نمايد. در مقابل ، session با هر درخواست مجددا" ايجاد مي گردد .

 Mode

 نحوه ذخيره سازي اطلاعات session state توسط ASP.NET را تشريح مي نمايد . مد ذخيره سازي بر اساس تنظيمات انجام شده در web.config مشخص مي گردد .

 SessionID

 يك رشته به همراه شناسه منحصربفرد session را براي سرويس گيرنده جاري ارائه مي نمايد .

 StaticObjects

يك مجموعه فقط خواندني از آيتم هاي session كه توسط تگ هاي <object runat=server> در فايل global.asax تعريف شده است را ارائه مي نمايد . معمولا" از اين روش استفاده نمي گردد و صرفا" پتانسيلي است در جهت سازگاري با برنامه نويسي ASP است .

 Timeout

مدت زماني را كه پس از سپري شدن آن امكان حذف session جاري وجود دارد ، مشخص مي نمايد . در بازه زماني فوق نبايد درخواستي از سرويس گيرنده دريافت شده باشد .
مقدار پارامتر فوق را مي توان از طريق برنامه تغيير داد تا زمينه استفاده از يك session با طول عمر بيشتر براي عمليات مهم تر فراهم گردد .

 Abandon

 متد فوق session جاري را حذف و  تمامي حافظه اشغال شده توسط session را آزاد مي نمايد .
بدين منظور مي توان از يك  صفحه log off استفاده كرد تا اين اطمينان حاصل شود كه حافظه سرويس دهنده در اسرع وقت و به سرعت آزاد مي گردد .

 Clear

 متد فوق تمامي آيتم هاي session را حذف مي نمايد ولي شناسه session جاري را تغيير نمي دهد .

جدول 1  : متدها و خصلت هاي كلاس  HttpSessionState


در بخش نهم بحث خود را در ارتباط با session state  ادامه داده و به بررسي يك نمونه مثال كاربردي خواهيم پرداخت  .

برگرفته از سايت سخا روش

Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image