دوره های آموزشی
خانه / Asp Form / مدیریت حالت در ASP.NET

مدیریت حالت در ASP.NET

هر بار که یک صفحه وب به سمت سرور ارسال می شود یک نمونه از کلاس آن صفحه ساخته می شود. در برنامه نویسی وب سنتی این کار به این معنی بود که تمام اطلاعات مربوط به آن صفحه و کنترل های بر روی آن در یک رفت و برگشت به سرور (round trip) از بین خواهد رفت. به عنوان مثال اگر کاربر اطلاعاتی را در یک textbox وارد کند، آن اطلاعات در یک رفت و برگشت از طرف مرورگر یا مشتری (client) به سمت سرور از دست خواهد رفت. در متن زیر به بررسی مدیریت حالت در ASP.NET برای رفع این مشکل خواهیم پرداخت.

ASP.NET State Managemet

برای جلوگیری از این محدودیت که در برنامه نویسی وب سنتی وجود داشت، ASP.NET راه کارهای مختلفی را ارائه می دهد که باعث محافظت از داده می شود. این ویژگی ها عبارتند از:

  • View State
  • Control State
  • Hidden Fields
  • Cookies
  • Query Strings
  • Application State
  • Session State
  • Profile properties

در view state، control state، hidden fields،cookies و query strings  داده در سمت client به شیوه های مختلف ذخیره می شود، در حالیکه در application state، session state و profile properties داده در حافظه های موجود در سرور ذخیره می شود. هر کدام از دو روش نقاط قوت و ضعف خاص خود را دارند.

روش های مدیریتی مبتنی بر مشتری:(Client-based)

بخش های بعد در مورد راهکارهای مدیریت حالت که در آن اطلاعات داخل page در کامپیوتر client ذخیره می شود توضیح می دهد. هیچ اطلاعاتی در بین round trip ها در سرور ذخیره نمی شود.

view state

view state یک دیکشنری از اشیا برای نگه داری از داده های مهم هر page فراهم می کند. این روش، روش پیش فرض است که هر page برای نگه داری اطلاعات و ویژگی های کنترلی خود مابین رفت و برگشت ها استفاده می کند.

وقتی یک page پردازش می شود حالت فعلی page و کنترل های آن با یک رشته hash می شود و اگر میزان اندازه داده در view state بیش تر از مقدار معین شده که در ویژگی  MaxPageStateFieldLength قرار دارد باشد، به صورت یک فیلد پنهان در داخل page ذخیره می شود. وقتی که page دوباره به سمت سرور ارسال می شود رشته view state را هنگام بارگذاری، تجزیه (parse) می کند و اطلاعات در داخل آن باقی می ماند.

Control state  

گاهی اوقات نیاز دارید برای درست کار کردن کنترل ها، داده های مربوط به حالت کنترل (control state) را ذخیره کنید. به عنوان مثال اگر کنترلی بنویسید که شامل tabهای مختلفی باشد و هر  tab اطلاعات مختلفی را نشان می دهد، برای اینکه کنترل ها به درستی کار کنند هر کنترل باید بداند که کدام tab در هر round trip انتخاب می شود. view state  می تواند برای این منظور انتخاب شود اما می تواند توسط توسعه دهندگان در سطح page غیرفعال شود و منجر به عدم کنترل گردد. برای حل این مشکل فریم ورک ASP.NET ویژگی به نام control state را معرفی کرد که موجب می شود اطلاعاتی که منحصرا مربوط به کنترل هستند نگه داری شوند و نتوان مانند view state آن را غیرفعال کرد.

Hidden Fields

ASP.NET به شما اجازه می دهد تا اطلاعات را در داخل Hidden Fields یا فیلدهای پنهان ذخیره کنید. یک فیلد پنهان به طور آشکار در صفحه مرورگر render نمی شود اما می توانید ویژگی های آن را به صورت دلخواه مانند کنترل استاندارد تنظیم کنید. وقتیکه یک page در سرور ثبت می شود محتوای فیلد پنهان آن در یک فرم HTTP همراه با سایر کنترل ها ارسال می شود. فیلد پنهان مانند یک مخزن (repository) برای هر اطلاعاتی که ذخیره می کنید عمل می کند.

یادداشت امنیتی

برای هر کاربر دشمن دیدن و تغییر دادن محتوای فیلدهای پنهان ساده و راحت است. اطلاعاتی که حساسیت بالایی دارند یا درست کار کردن سیستم وابسته به آنها است را در داخل فیلدهای پنهان قرار ندهید.

کنترل Hidden Fields یک متغیر را در ویژگی به نام value ذخیره می کند و باید به طور صریح به page اضافه شود. برای اینکه مقادیر فیلد پنهان هنگام پردازش page قابل دسترس باشند باید با فرمان HTTP POST  آن page را ثبت کنید. اگر از فیلدهای پنهان استفاده می کنید و page با فرمان HTTP GET ثبت شده است، فیلدهای پنهان در دسترس نخواهند بود

Cookies

Cookie حجم کمی از داده است که به صورت که به صورت یک فایل متنی در سیستم فایل client یا در مرورگر client ذخیره می شود. Cookie شامل اطلاعات مختص به سایت است که سرور آنها را همراه خروجی های page به سمت client ارسال می کند.cookie  ها می توانند موقت(با تاریخ و زمان انقضای معین) یا دائمی باشند.

شما می توانید از cookie برای ذخیره اطلاعات درباره ی یک client ، session یا application استفاده کنید. cookie ها در دستگاه client ذخیره می شوند و زمانی که مرور گر یک page را درخواست می دهد client اطلاعات داخل cookie را همراه اطلاعات در خواستی می فرستد. سرور می تواند cookie را بخواند و مقادیر آن را استخراج کند.
یک استفاده رایج می تواند ذخیره یک token باشد که نشان می دهد کاربر قبلا در برنامه احراز هویت شده است.

یادداشت امنیتی
مرورگر فقط می تواند داده ای را به سرور ارسال کند که سازنده cookie است. کاربران دشمن می توانند راه هایی برای دسترسی به cookie ها و خواندن محتوای آنها پیدا کنند.توصیه می شود که اطلاعات مهم مثل نام کاربری یا پسورد را در cookies ذخیره نکنید. جای آن token را در cookie ذخیره کنید که کاربر را شناسایی می کند و از token برای پیدا کردن اطلاعات مهم درسرور استفاده می کند.

Query Strings
رشته Query اطلاعاتی است که به انتهای page URL اضافه می شود.یک رشته query می توانند مانند مثال زیر باشد
http://www.contoso.com/listwidgets.aspx?category=basic & price=100
در مسیر URL بالا رشته query با علامت سوال شروع می شود و شامل 2 جفت به صورت attribute/value است.که یکی از انها “category” و دیگری “price” نام دارد. رشته query یک راه ساده اما محدود را برای ذخیره اطلاعات فراهم می کند. به عنوان مثال راه ساده ای برای ارسال اطلاعات از یک page به page دیگر وجود دارد مانند ارسال یک شماره محصول (product number) از یک page به page دیگری که از آنجا پردازش خواهد شد.با این حال بعضی از مرورگر ها و سیستم های client یک محدوده 2083 کاراکتری برای طول URL در نظر می گیرند.

یادداشت امنیتی
اطلاعاتی که در رشته query ارسال می شوند می توانند توسط کاربران دشمن تحریف و دچار تغییر شوند. به رشته های query برای ارسال اطلاعات مهم و حساس اطمینان نکنید.همچنین کاربر می تواند یک URL را bookmark کند یا URL را برای کاربران دیگر ارسال کند.
برای اینکه مقدار رشته query در هنگام پردازش page در دسترس باشد page را باید با فرمان HTTP GET ثبت (submit) کنید. به همین علت زمانی که از فرمان HTTP POST برای پردازش page استفاده می کنید نمی توانید از فواید رشته query بهره ببرید.

روش های مدیریتی مبتنی بر سرور(server-based)
ASP.NET روش های متنوعی را برای نگه داری و ذخیره اطلاعات بر روی سرور به جای ذخیره آن ها بر روی سیستم client ارائه می دهد.با استفاده از روش های مدیریتی مبتنی بر سرور می توانید حجم اطلاعات ارسال شده به client را کاهش دهید اگرچه این کار نیازمند استفاده از منابع پر هزینه بر روی سرور است. بخش های بعدی 3 روش مدیریتی مبتنی بر سرور را شرح می دهند:Application state و session state و profile properties.

Application State
ASP.NET به شما اجازه می دهد که مقادیر را با استفاده از application state که یک نمونه از کلاس HTTP Application State است برای هر برنامه وب فعال ذخیره کنید.application state یک مکانیزم عمومی ذخیره سازی است که توسط تمام pageها در برنامه وب قابل دسترسی است.بنابراین application state برای ذخیره سازی اطلاعاتی که بین رفت و برگشت های (round trip) سرور و مابین در خواست ها برای هر page باید نگه داری و ذخیره شوند مفید خواهد بود.
Application state در یک دیکشنری مقدار/کلید (key/value)_که زمان هر درخواست به URL ساخته می شود_ذخیره می گردد.شما می توانید اطلاعات مربوط به application خود را برای ذخیره شدن مابین هر درخواست به page به این ساختار اضافه کنید.
زمانی که شما اطلاعات مربوط به application خود را به application state اضافه می کنید سرور آنها را مدیریت می کند.

Session State
ASP.NET به شما اجازه می دهد که مقادیر را با استفاده از Session state که یک نمونه از کلاس Http Session state است برای هر برنامه فعال وب ذخیره کنید.
Session state مشابه application است به استثنا این که Session state به Session فعلی مرورگر محدود می شود. یعنی محدوده فعالیت آن، Session فعلی مرورگر است. وقتی کاربران مختلف از برنامه شما استفاده می کنند هر Session کاربر یک Session state متفاوت خواهد داشت. همچنین وقتی یک کاربر از برنامه شما خارج می شود و بعد دوباره به آن برمی گردد Session کاربر دومی Session state متفاوتی نسبت به اولی خواهد داشت.
Session state به صورت یک دیکشنری مقدار/کلید(key/value) برای ذخیره اطلاعات مربوط به Session_که باید مابین رفت و برگشت ها به سرور و مابین درخواست به page نگه داری شوند_ساخته می شود.
می توانید از Session state برای انجام کار های زیر استفاده کرد:
• برای شناسایی درخواست های مرورگر یا client به صورت انحصاری و نگاشت ان ها به نمونه های Session تنها و تکی بر روی سرور

• ذخیره داده مربوط به Session بر روی سرور برای استفاده از آن هنگام درخواست های چند گانه مرورگر یا client در session یکسان
• جهت افزایش رویداد های مدیریت session
وقتی اطلاعات مربوط به application را به session state اضافه می کنید سرور این شی را مدیریت می کند.بسته به اینکه کدام گزینه را در نظر می گیرید اطلاعات session بر روی cookie ها، بر روی server یا بر روی کامپیوتری که Microsoft SQL Server را اجرا می کند ذخیره شوند.

Profile properties
ASP.NET ویژگی به نام profile properties را فراهم می کند که اجازه ذخیره سازی داده های مربوط به کاربر را می دهد.این ویژگی مشابه session state است به جز اینکه داده ی profile زمانی که session کاربر به اتمام می رسد از بین نمی رود. ویژگی profile properties از یک پروفایل ASP.NET استفاده می کند و به صورت پایدار ذخیره می شود.پروفایل ASP.NET به شما اجازه می دهد تا به راحتی اطلاعات خود را مدیریت کنید بدون اینکه برای خود یک پایگاه داده (data base) بسازید و آن را ذخیره کنید.همچنین پروفایل با استفاده از یک API قوی که می توان از هر جای برنامه به آن دسترسی پیدا کرد اطلاعات کاربر را در دسترس قرار می دهد.
شما می توانید اشیا از هر نوع را در پروفایل ذخیره کنید.ویژگی پروفایل ASP.NET یک سیستم ذخیره سازی عمومی و کلی را فراهم می کند که به شما اجازه می دهد هر نوع داده را تعریف و ذخیره کنید.
برای استفاده از profile properties باید یک سرویس دهنده profile را پیکربندی کنید.ASP.NET شامل کلاس Sql profile provider است که به شما اجازه می دهد داده پروفایل را در یک پایگاه داده SQL ذخیره کنید.همچنین می توانید کلاس سرویس دهنده پروفایل خود را نیز بسازید که داده پروفایل را در یک فرمت دلخواه تغییر داده شده (custom) و در یک مکانیزم ذخیره سازی دلخواه مثل فایل XML یا یک وب سرویس(web service) ذخیره می کند.
چون داده ای که در profile properties قرار دارد در داخل حافظه برنامه (application memory) ذخیره شده است از طریق ریستارت کردن ( Internet Information Service (IIS حفظ و نگه داری می شود.

درباره ی محمد بروشکی

همچنین ببینید

فیلم آموزش برنامه نویسی

فیلم آموزشی SQL Server 2014 / ASP.NET/CSS/jQuery

فیلم آموزشی SQL Server 2014 / ASP.NET/CSS/jQuery چرا باید  SQL Server و  Visual Studio را ...

پاسخ دهید

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