آموزش ASP.Net > مدیریت وضعیت ( State ) در Asp.Net
معرفی انواع اشیای مدیریت وضعیت ( State ) در Asp.Net
مقدمه :
هر بار که صفحه به سرور ارسال ( Post ) می شود ، نسخه ای جدید از آن و کلاس مربوطه
ساخته می شود . در برنامه نویسی سنتی وب ، این مسئله غالبا به این معنا بود که کلیه
اطلاعات مرتبط با صفحه و کنترل های آن ، در جریان رفت و برگشت به سرور از بین می رفتند
. برای مثال ، اگر کاربر اطلاعات را در یک کادر متن وارد نماید ، ممکن است این اطلاعات
در رفت و برگشت صفحه به سرور و کلاینت ، از بین برود . برای فائق آمدن بر این مشکل
سنتی ، 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 String ، اطلاعات
را به نحوی بر روی کامپیوتر کاربر ( کلاینت ) ذخیره می کنند .
اما گزینه های Application State ، Session State و Profile Properties اطلاعات را
در حافظه سرور و یا در یک پایگاه داده ذخیره می کنند . هرکدام از این گزینه ها دارای
مزیت و معایب منحصر به فردی هستند . در ادامه به تشریح آنها خواهیم پرداخت .
گزینه های مدیریت وضعیت (State ) در سمت کلاینت :
در بخش اول به معرفی گزینه های ذخیره اطلاعات در صفحه و یا بر روی کامپیوتر کاربر (
کلاینت ) می پردازیم . در گزینه های این بخش هیچ اطلاعاتی بر روی سرور ذخیره نمی شود
.
1) View State : این خاصیت یک شی فهرست وار را برای ذخیره سازی اطلاعات
بین درخواست های متعدد ارسال و دریافت صفحه به سرور ، برای آن صفحه فراهم می کند .
این شی روش پیش فرض ذخیره اطلاعات صفحه و کنترل های موجود در آن بین رفت و برگشت ها
به سرور است . هنگامی که صفحه به سرور ارسال می شود ، وضعیت جاری صفحه و اطلاعات موجود
در کنترل های آن ، در قالب یک متن رمزنگاری شده و درون یک یا چند کنترل Hidden Field
ذخیره می شوند . اگر حجم اطلاعات ذخیره شده از مقدار تعیین شده در خاصیت MaxStateFieldLength
بیشتر باشد ، صفحه از چندین کنترل Hidden Field استفاده خواهد کرد . هنگامی هم که صفحه
از سرور برمی گردد ( Postback می شود ) ، اطلاعات موجود در شی متنی View State را خوانده
و آنها را به کنترل های مرتبط برمی گرداند . برای دریافت اطلاعات بیشتر راجع به نحوه
عملکرد این شی ، به بخش آموزش کار با شی View State بروید .
2) Control State : برخی اوقات شما نیاز دارید تا اطلاعات وضعیت یک
کنترل خاص را در یک مقطع برای کارایی صحیح اش نگهداری کنید . برای مثال فرض کنید که
یک کنترل دلخواه ( Custom Control ) را طراحی کرده اید که دارای لبه ها ( Tab ) ی مختلفی
است که اطلاعات گوناگونی را نگهداری می کند . مثلا در جریان رفت و برگشت صفحه به سرور
برای این کنترل خاص نیاز دارید که بدایند قبل از ارسال صفحه به سرور ، کنترل اطلاعات
کرام لبه را نشان می داده است . از خاصیت View State برای نگهداری وضعیت این کنترل
می توانید استفاده نمایید اما این ویژگی قابل غیرفعال کردن در صفحه است و ممکن است
سهوا یا عمدا خاموش شده و باعث از کار افتادن کارایی کنترل فوق شود . برای حل این شکل
، Asp.Net استفاده ار ویژگی Control State را فراهم کرده است . به وسیله شی Control
State شما می توانید وضعیت جاری یک کنترل را قبل از ارسال به سرور در صفحه ذخیره نموده
، بدون اینکه امکان غیرفعال شدن آن وجود داشته باشد ، برخلاف View State .
3) Hidden Fields : زبان Asp.Net این امکان را به شما می دهد تا اطلاعات
خود را در فیلدهای مخفی یا کنترل HiddenField ذخیره نمایید . این کنترل ها بصورت تگ
های input از نوع Hidden Field بر روی صفحات Html ، رندر می شود . کنترل Hidden Fields
خروجی ظاهری بر روی صفحه ندارد اما مانند سایر کنترل های Asp.Net می توانید خواص مورد
نظرتان را برای آن تعیین نمایید . هنگامی که صفحه به سرور ارسال می شود ، مقدار یک
کنترل Hidden Fields همراه با مقادیر سایر کنترل های صفحه از طریق یک پروتکل HTTP Form
ارسال می شود . کنترل Hidden Fields اطلاهات را درون خاصیت Value خود نگهداری می کند
و بصورت مستقیم قابل تعیین است . برای دریافت اطلاعات بیشتر به بخش آموزش کنترل Hidden
Fields در Asp.Net بروید .
نکته 1 : اگر می خواهید که یک کنترل Hidden Fields کارایی صحیح ای
داشته و اطلاعات آن در زمان Postback صفحه قابل دسترسی باشد ، باید صفحه را توسط یک
متد HTTP Post به سرور ارسال نمایید . اگر صفحه را به واسطه کلیک بر روی یک لینک و
یا از طریق متد HTTP GET به سرور ارسال نمایید ، این کنترل کار نخواهد کرد .
نکته 2 : با وجود اینکه اطلاعات کنترل Hidden Fields بر روی صفحه
قابل مشاهده نیست ، اما از طریق مشاهده کد صفحه ( Source Code ) توسط سایر کاربران
می تواند دیده شود . لذا اطلاعات خاص را نباید در این کنترل قرار داد .
4) کوکی ها (Cookies) : یک کوکی بخش کوچکی از اطلاعات است که درون
یک فایل متنی text یا در حافظه مرورگر ذخیره می شود . کوکی ها می توانند دارای مدت
انقضاء بوده و یا نامحدود زمانی باشند . شما می توانید از کوکی ها برای نگهداری اطلاعات
کاربران یا نرم افزارها و ... استفاده نمایید . کوکی ها بر روی کامپیوتر کاربر ذخیره
شده و هنگامی که مرورگر صفحه ای را درخواست می کند ، کوکی آن صفحه را نیز همراه با
درخواست خود به سرور ارسال می کند . سرور می تواند کوکی ها را خوانده و استفاده نماید
. برای دریافت اطلاعات بیشتر راجع به کوکی ها به بخش آموزش کوکی ها در Asp.Net بروید
.
5) Query String : شی بعدی دخیره در حافظه ، کویری استرینگ ها می
باشند . Query String ها ، اطلاعاتی هستند که به ادامه آدرس صفحه الحاق می شوند
. برای مثال یک Query String معمولی می تواند بصورت زیر باشد :
|
کد
|
http://www.developer1.ir/listwidgets.aspx?category=basic&price=100
|
URL بالا دارای دو Query String به نام های Category و Price با مقادیر تعیین شده است
که بوسیله علامت ؟ در انتهای آدرس صفحه اضافه شده اند . معمولا از Query String برای
انتقال اطلاعات بین صفحات استفاده شده و دارای حجم محدودی برای ارسال اطلاعات هستند
. همچنین این اطلاعات توسط کاربر قابل مشاهده بوده و دارای امنیت بسیار پایینی هستند
. برای ارسال اطلاعات از طریق Query String بایستی صفحه را حتما بوسیله متد HTTP GET
ارسال نمایید ، لذا در هنگام استفاده از متد HTTP POST ، این اشیا کار نمی کنند .
گزینه های مدیریت وضعیت سمت سرور :
Asp.Net گزینه های مختلفی را برای نگهداری اطلاعات و وضعیت صفحه بر روی سرور به جای
ذخیره آنها در کامپیوتر کاربر در اختیار طراح قرار داده است . با استفاده از امکانات
ذخیره سازی اطلاعات بر روی سرور ، می توانید حجم اطلاعات ارسالی از وضعیت و داده های
صفحه به سرور را کاهش داده ، ولی در مقابل از منابع سخت افزاری آن بیشتر استفاده خواهید
نمود .
1) Application State : زبان Asp.Net این امکان را به شما می دهد
تا مقادیر ( Values ) را به وسیله قابلیت Application State که نسخه ای از کلاس HTTP
Application State است ، برای هر برنامه وب فعال ، نگهداری کنید . Application State
، یک حافظه عمومی ( Global ) بوده که از طریق تمامی صفحات برنامه وب قابل دسترسی است
. بنابراین حافظه برای نگهداری اطلاعات عمومی و اطلاعاتی که باید در هر بار ارسال صفحات
به سرور مورد استفاده قرار بگیرد ، مناسب است . Application State در جفت های نام /
مقدار ، برای هر درخواست به یک آدرس مشخص URL ایجاد می شوند . برای دریافت اطلاعات
بیشتر به بخش ASP.NET State Management Recommendations بروید .
2) Session State : زبان Asp.Net امکان دیگری برای ذخیره اطلاعات
در حافظه به نام Session State را که نسخه ای از کلاس HTTP Session State است ، نیز
در اختیار ما قرار داده است . برای دریافت اطلاعات کامل به بخش آموزش کار با Session
در Asp.Net بروید . Session State بسیار شبیه Aplication State است با این تفاوت که
تمرکز آن بر روی وضعیت مرورگر جاری است . اگر چندین کاربر بطور همزمان از برنامه وب
شما استفاده نمایند ، هر کاربر نسخه Session متعلق به خود را خواهد داشت . همچنین اگر
کاربر استفاده از برنامه وب را رها کرده و مجددا پس از مدتی بازگردد ، Session اول
با Session دوم فرق خواهد داشت . Session State نیز بصورت جفت مقادیر نام/مقدار برای
نگهداری اطلاعاتی که در هربار ارسال صفحه به سرور مورد نیاز است ، به کار می رود .
بطور کلی از این خاصیت می توان برای موارد زیر استفاده کرد :
- شناسایی مرورگر یا کامپیوتر کلاینتی که درخواست به سرور ارسال نموده و ارسال درخواست
آن به اطلاعات مرتبط در حافظه سرور .
- نگهداری اطلاعات مورد نظر بر روی سرور برای استفاده در چندین مرورگر یا کلاینت در یک
Session واحد .
- فعال کردن رویدادهای طراحی شده برای مدیریت Session .
3) Profile Properties : بوسیله امکان Profile Properties ، Asp.Net
می توانید اطلاعات مخصوص کاربران را ذخیره نماید . این ویژگی بسیار شبیه Session State
است ، بجز اینکه اطلاعات Profile Properties با از بین رفتن Session از بین نمی رود
. امکان Profile Properties ، از یک پروفایل Asp.Net استفاده نموده که دارای قالبی
از پیش تعیین شده است و برای هر کاربر متفاوت می باشد . امکان پروفایل Asp.Net این
قابلیت را در اختیار شما قرار می دهد تا بتوانید بدون طراحی یک پایگاه داده از صفر
، اطلاعات کاربران را نگهداری کنید . برای استفاده از امکان Profile Properties در
برنامه خود ، باید یک فراهم کننده Profile را در برنامه خود فعال نمایید . Asp.Net
دارای یک کلاس SQL Profile Provider است که از آن می توانید برای نگهداری داده در یک
پایگاه داده SQL استفاده کرده و یا اینکه منبع داده ای با قالب و ساختار دلخواه خود
ایجاد نمایید ، مثل پایگاه داده SQL یا فایل XML .
برای دریافت اطلاعات بیشتر به
راهکار 4 - 5 : نگهداری اطلاعات کاربران در سایت ها بوسیله امکان Profile properties
بروید .
راجع این مطلب
سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...
>>>>> ورود به انجمن تخصصی
نطر خودتان درباره این صفحه را با ما در میان گذاشته و در صورت تمایل از Developer1
حمایت نمایید :