بررسی Session State New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 دوشنبه  4  ارديبهشت  1396  2017  Apr.  24   Monday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 State Management در ASP. NET 2.0 (بخش هشتم)

 مديريت وب

13429

17

4.5

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

State Management در ASP. NET 2.0

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  ادامه داده و به بررسی يك نمونه مثال كاربردی خواهيم پرداخت  .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382