تبلیغات
آموزشASP.NET - State Management در ASP. NET 2.0 (بخش هشتم)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
سه شنبه 24 اسفند 1389 :: نویسنده : ارش کاکاوند

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





نوع مطلب :
برچسب ها :
لینک های مرتبط :


دوشنبه 27 شهریور 1396 11:07 ب.ظ
Greate post. Keep posting such kind of information on your site.
Im really impressed by your blog.
Hey there, You've performed a fantastic job.
I'll certainly digg it and in my opinion recommend to my friends.
I am sure they will be benefited from this website.
سه شنبه 14 شهریور 1396 02:17 ب.ظ
Why viewers still make use of to read news papers when in this technological world everything is accessible on web?
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :