آموزش 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 حمایت نمایید :

آیا مطالب این صفحه برای شما مناسب و مفید بوده است :

نام :                 
آدرس Email :    
 
نظر شما :  
 
سوال امنیتی : پایتخت ایران ؟      
حمایت از سایت Developer1