عمومی

روشهای انتقال متغیرها و داده از یک صفحه به صفحه دیگر : Session

در مدت زمان حیات یک برنامه به مواردی برخورد می کنیم که لازم است جهت ذخیره سازی اطلاعات از امکانات پیشرفته تری استفاده گردد. به عنوان مثال ، یک برنامه ممکن است به ذخیره اطلاعات پیچیده ای نظیر اشیاء سفارشی داده و استفاده از آنها در سایر صفحات نیاز داشته باشد. ارسال اینگونه اطلاعات از طریق کوکی و یا یک 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 را از طریق یک شناسه ۱۲۰ بیتی منحصربفرد پیگیری و از یک الگوریتم اختصاصی برای تولید آن استفاده می نماید.  بنابراین حداقل این تضمین از لحاظ تئوری ایجاد می گردد که عدد تولید شده منحصر بفرد بوده و به اندازه کافی تصادفی است ، تا امکان و یا احتمال تشخیص و حدس آن توسط مهاجمان به حداقل مقدار خود برسد.

شناسه ، تنها اطلاعات مبادله شده بین سرویس دهنده وب و سرویس گیرنده است. زمانی که سرویس گیرنده شناسه 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 می گویند.

در شکل زیر معماری 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 به دلیل عدم فعالیت کاربر در یک بازه زمانی خاص ( مقدار پیش فرض ۲۰ دقیقه )
  • خاتمه دادن به عمر مفید یک session از طریق کد و توسط برنامه نویس ( استفاده از متد Session.Abandon)

در دو مورد اول ، session همچنان در حافظه باقی خواهد ماند چرا که سرویس دهنده وب از بستن مرورگر و یا تغییر پنجره توسط کاربر آگاهی ندارد. در چنین مواردی ، session آخرین لحظات عمر خود را در حافظه طی می نماید و عملاً غیرقابل دسترس باقی می ماند تا زمانی که عمر آن به اتمام رسد.

علاوه بر موارد فوق ، زمانی که application domain مجدداً ایجاد گردد ، session state حذف خواهد شد. فرآیند فوق در زمان بهنگام سازی برنامه و یا تغییر در تنظیمات پیکربندی انجام می شود.

همچنین به منظور حصول اطمینان از صحت عملکرد برنامه ، application domain بطور ادواری بازسازی می شود . در صورتی که رویکرد فوق باعث بروز مسائلی می گردد ، می توان اطلاعات session state را به صورت out of process ذخیره کرد. در مدل نگهداری state به صورت out-of-process ، اطلاعات session حتی با غیرفعال شدن application domain همچنان باقی خواهند ماند.

در جدول زیر متدها و خصلت های مختلف کلاس  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 جاری را تغییر نمی دهد .

پیکربندی session در برنامه های وب

پیاده کنندگان برنامه های وب برای پیکربندی session state می توانند از فایل web.config استفاده نمایند. با استفاده از فایل فوق می توان گزینه های پیشرفته ای  نظیر  timeout و مدsession state را پیکربندی کرد. در صورتی که از ویژوال استودیو برای ایجاد یک برنامه وب استفاده شده باشد ، همزمان با ایجاد پروژه ، بطور اتوماتیک یک فایل web.config  نیز ایجاد می گردد.

کد زیر یک نمونه فایل web.config را به همراه مهمترین خصلت های تاثیرگذار در پیکربندی session state را نشان می دهد.

<?xml version=”1.0″ encoding=”utf-8″ ?>
<configuration>
<system.web>

<sessionState
cookieless=”UseCookies” cookieName=”ASP.NET_SessionId”
regenerateExpiredSessionId=”false”
timeout=”20″
mode=”InProc”
stateConnectionString=”tcpip=127.0.0.1:42424″
stateNetworkTimeout=”10″
sqlConnectionString=”data source=127.0.0.1;Integrated Security=SSPI”
sqlCommandTimeout=”30″
allowCustomSqlDatabase=”false”
customProvider=””
/>
</system.web>
</configuration>

با کارت بانکی باشگاه ایران هاست پولتان به حسابتان باز می گردد.

همین حالا رایگان عضو شوید

مدیر بلاگ

مشخصات مدیر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن