آشنایی با View State ،Session Stateو Application State
چهارشنبه 18 فروردین 1395در این مقاله می خواهیم به توضیح View state، Session Stateو application state بپردازیم.این مقاله به شما کمک خواهد کرد تا درک بهتری از آنها پیدا کنید وهمچنین چگونگی استفاده ، مزایا و معایب آنها نیز بیان شده است.
معرفی
این مقاله تکنیک های مدیریت state های مختلف را نشان میدهد. کار با state ها در برنامه های وب ASP.NET برای توسعه دهندگان بسیار گیج کننده است . این مقاله به شما کمک خواهد کرد تا درک کنید که چگونه باید از آن استفاده کنید.
پردازش Web application
هر زمان که یک Web application کامپایل شود، سورس کد این پروژه به یک زبان میانی تولید و اسمبلی خروجی ،یک DLL است که در پوشه bin دایرکتوری پروژه بصورت کامپایل شده ،قرار میگیرد .
هنگامی که URL نرم افزار توسط یک کاربر درخواست میشود ، وب سرور، پروژه DLL درخواست شده را در حافظه لود و نمونه ای جدیدی از وب فرم درخواست شده ایجاد میکند. که نتایج ایجاد شده یک نمونه جدید از وب فرم و تمام کنترلها ومتغییرهای موجود در وب فرم درخواست شده است.
پس از ایجادآن ، چرخه حیات صفحه تکمیل میشود و خروجی به صورت HTML ارسال میشود و این خروجی به عنوان جواب به مرورگر فرستاده میشود. پس از آن ،شی وب فرم بلافاصله نابود میشود .
نمونه کد :
namespace Test { public partial class _Default : Page { int counter = 0; protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { TextBox1.Text = "0"; } } protected void Button1_Click(object sender, EventArgs e) { counter = counter + 1; TextBox1.Text =counter.ToString(); } } }
توضیح:
زمانی که URL برنامه درخواست شد، " get request" را در رویداد page load چک میکند و text box را با 0 مقداردهی میکند.
کلیک برروی دکمه ،می تواند یک post request به سرور وب باشد ،که یک نمونه جدید از webform1 که فرایند کامل تولید یک HTML و ارسال آن به مرورگر کلاینت را انجام میدهد، ایجاد میکند. این مقادیر از آخرین post call ساخته شده به وب سرور است.
تکنیک های مختلف :state management
state management .1 سمت سرور
Hidden Field
Control State
state management .2 سمت سرور
Application Object
می توانید تعدادی از راه های state management همانطور که در بالا ذکر شده را بررسی کنید.
View state
View state تکنیکی برای نگهداری state در کنترل post-back صفحه است ،
به این معنی که ذخیره مقدار صفحه پس از post-back (ارسال و دریافت اطلاعات از سرور) در خود صفحه انجام میگیرد و داده های view state میتوانند هنگامی که صفحه در سرور پست شد ،مورد استفاده قرار بگیرد و یک نمونه جدید از صفحه ایجاد کند.
داده های View state ، یک رشته ی سریال کد گذاری base64 هستند که در یک فیلد ورودی پنهان در صفحه ذخیره شده اند ودر هر request و respons کاربر، بین مرورگر و سرور جابه جا میشود.
ViewState["VarName"]= store any thing
بر روی وب سرور، در رویداد init صفحه کد گذاری شده و مرورگر با مقدار به کلاینت ارسال می شود.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="mlqif/yufT121LcPxuR5TVSuWVDJ7aU+2ONZy5gYWjTgmggCv5ed4OlAOS+jpYLWSI1hLbIA0cyrLI2YOZPo4RIESahtyWmLMhXbfEJ/GvJIvbfEE+JSHtDaw2iFc/kmz73T0oifsuZN6JzufE1ZI+NL7qrjzpOc9PTadu+Qxxokyw7cfV6ISa+fu9qSmjpYsxVtyxg/Z0QTyZBRaUiMbxWEJNlH3csR1d8HCPtoZ2s=" />
namespace Test { public partial class _Default : Page { int TestCounter = 0; protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { TextBox1.Text = "0"; TextBox2.Text = "0"; } } protected void Button1_Click(object sender, EventArgs e) { //With out View State TestCounter = TestCounter + 1; TextBox1.Text = TestCounter.ToString(); if (ViewState["counter"] != null) { TestCounter = (int)ViewState["counter"] + 1; TextBox2.Text = TestCounter.ToString(); } ViewState["counter"] = TestCounter; } } }
مزایای View State
.1 براحتی پیاده سازی میشود.
.2 بر روی مرورگر کلاینت در یک فیلد مخفی به شکل Base64 Encoding String ذخیره میشود ولی رمزگذاری نمیشود و میتواند به راحتی رمزگذاری شود.
.3 به خوبی با HTTP ، داده ها را انتقال میدهد.
معایب View State
.1سربار عملکرد برای صفحه هایست که با داده های بزرگ در View State ذخیره شده اند.
.2 بصورت کدگذاری شده ذخیره میشود و برای امنیت اطلاعات خیلی حساس استفاده نمیشود.
موارد استفاده
View state باید هنگامی استفاده شود که کاربر نیاز به ذخیره مقدار کمی از داده ها در مرورگر کلاینت با بازیابی سریع دارد. برنامه نویس نباید از این روش برای نگهداری state ، در صفحه هایی با داده بزرگ استفاده کنند. از این روش برای ارسال داده ها از یک صفحه به صفحه دیگر استفاده میشود. برای ذخیره اطلاعات حساس امن نیست.
ASP.NET Session State
Session State یکی دیگر از روش state management برای ذخیره State است، به معنی آنکه در ذخیره سازی و استفاده از مقادیر مربوط به درخواستهای قبلی کمک می کند.
هر زمان که کاربر ،یک وب فرم از یک برنامه تحت وب درخواست کرد، از یک Session ASP.NET برای ذخیره درخواست قبلی دریک دوره زمانی مشخص ،استفاده می شود .
//Stored Textbox value Session["Counter"] = TextBox3.Text; //Stored Dataset Session["ds"] = dsData; Session variables are stored in a SessionStateItemCollection object that is exposed through the HttpContext.Session property.
Session variables در یک شی SessionStateItemCollection ذخیره میشوند که از طریق property HttpContext.Session در معرض نمایش قرارمیگیرد.
به طور پیش فرض، در session state تمام برنامه های ASP.NET فعال میشود.
Session state data در تمام صفحات وب به اشتراک گذاشته میشود ، به عبارت دیگر در هنگام navigating از یک صفحه، session داده ها در دسترس هستند.
namespace Test { public partial class SessionTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["Counter"] == null) { Session["Counter"] = 0; } TextBox1.Text = Session["Counter"].ToString(); } } protected void Button1_Click(object sender, EventArgs e) { if (Session["Counter"] != null) { int SessionCounter = (int)Session["Counter"] + 1; TextBox1.Text = SessionCounter.ToString(); Session["Counter"] = SessionCounter; } } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("MysessionPage.aspx"); } } } After navigating to the page mysessionpage.aspx and retrieving value from session. namespace Test { public partial class MysessionPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Session["Counter"] != null) { Label1.Text = Session["Counter"].ToString(); } } } }
در متغیرهای Session تک کاربره global data ،بر روی وب سرور ذخیره میشوند ، به این معنی که به طور پیش فرض متغیر session state در حافظه وب سرور ذخیره می شود و در تمام صفحات موجود است اما آن فقط برای یک session میباشد.
SessionID
کوکی ها Client Machine هستند که توسط یک session ، ذخیره ی session id را انجام میدهد .این session id توسط وب سرور استفاده میشود.
session id یک ویژگی منحصر به فرد در مرورگر است که بوسیله داده session بر روی سرور قابل شناسایی است. مقدار SESSIONID به طور تصادفی توسط ASP.NET ،در کوکی session مرورگرتولید و ذخیره میشود. مقدار SESSIONID در یک کوکی قرار میگیرد و با هر درخواست به برنامه ASP.NET ارسال می شود.
مرجع تعریف: MSDN
کوکی ها یک متن کوتاه هستند که به همراه درخواست ها و صفحات، بین وب سرور و مرورگر قرار میگیرند. کوکی شامل اطلاعاتی در مورد برنامه های تحت وب هستند که درهر زمان که کاربر از سایت بازدید کرد ،خوانده میشود
If the session mode is Inproc and cookieless=true then:
<sessionState mode="InProc" cookieless="true" customProvider="DefaultSessionProvider" >
Session id به عنوان بخشی از URL در هر درخواست ارسال خواهد شد و اگر Session id برداشته یا تغییر داده شود ، آن به عنوان یک درخواست جدید در نظر گرفته میشود.
Session Modes
Session Modes توضیح میدهد که چگونه متغیرهایSession ذخیره می شوند، به عبارت دیگر چه نوع ذخیره سازی توسط متغیر استفاده می شود و رفتار آن چیست.
رفتار پیش فرض در حافظه در یک فرآیند ASP .NETworker است.
Session Modes های مختلف موجود در ASP.NET
Off .1
InProc .2
StateServer .3
SQLServer .4
Custom .5
هر مدل یک رفتار متفاوت در برنامه تحت وب دارد. و هر کدام مزایا و معایب خود را دارند.
هنگامی که در حال کار با یک برنامه ASP.NET با متغیرهای session هستید، بسیار مهم است که session modes را به عنوان یکی از تکنیک های مدیریت state درک کنید session modes .انتخاب شده به عنوان mode در webconfig ، قادر به ذخیره متغیر، session و پس از آن مسئول رفتار نرم افزار خواهد بود .
Off
اگر برنامه هیچ نیاز و یا نیازهایی برای session stateنداشت، پس بسیار مهم است که از حالت Off استفاده شود. با استفاده از این کارایی نرم افزار بهتر خواهد بود.
InProc Mode
InProc Mode می تواند در یک برنامه وب ASP.NET ، از یک فایل پیکربندی با تنظیم ویژگی های mode در المنت SessionState استفاده کند .
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
هنگامی کهInproc session state استفاده میشود، متغیر session حافظه وب سرور ،در داخل پردازش کننده ASP.NET ذخیره می شود.
تعریف MSDN:
ASP.NET در یک فرایند شناخته شده به عنوان پردازش کننده ASP.NET اجرا می شود. تمام قابلیت های ASP.NET در محدوده این فرآیند اجرا می شوند.
اساسا متغیر session در یک پردازش کننده ی قابل اجرا IIS ،ذخیره می شود. بنابراین اگر این درخواست از همان کاربر باشد ، داده ها در دسترس خواهند بود.
مزایای استفاده از InProc:
.1 پیاده سازی آسان
.2 اشیاء پیچیده را می توان بدون ترتیب اضافه کرد.
.3 بهترین کارایی را در مقایسه با out-of-process modes دارد.
معایب InProc:
1. قادر به حفظ مقدار های session زمانیکه پردازش کننده ی IIS دوباره راه اندازی میشود ،نیست.
2. مقیاس پذیری یک مشکل عمده است.
3. برای برنامه های کاربردی با پایگاه وسیع خوب نیست.
هنگامی که شرایط لازم برای یک web farm و یا web garden وجود داشته باشد ، توسعه در حالت " out of process " مانند state server و یا SQL Server بهترین گزینه هستند.
State Server Session Mode
از دست دادن session data نقطه ضعف آن است ،که دلیل آن پردازش کننده recycle است .که می توان با استفاده از حالتی دیگر، حالت state server را کاهش داد.
تعریف مرجع MSDN
StateServer mode ، یک session state را در فرایندی جداگانه به نام ASP.NET state service ذخیره میکند، و تضمین می کند که session state حفظ شود. اگر برنامه های تحت وب دوباره راه اندازی شوند ، باعث می شود session stateوب سرور ،در یک Web farm در دسترس باشد.
ASP.NET یکی از سرویس های ویندوز است که متغیر session داده ها را در فرایند خود ذخیره میکند.
روش راه اندازی state server mode
services.msc را در Run وارد کنید ، سپس ASP.NET State Service را استارت کنید
به طور پیش فرض ASP.NET State Service در حالت manual است
<sessionState mode="StateServer" customProvider="DefaultSessionProvider" stateConnectionString="tcpip=localhost:42424"> stateConnectionString="tcpip=localhost : 42424"
Server Name/IP Port
StateConnectionstring اساسا از موارد زیر تشکیل میشود؛
Server/system : در آن یک سرویس ASP.NET ویندوز در حال اجرا است.
Port : به طور پیش فرض ، state service ازTCP port 42424 که با استفاده از رجیستری قابل تنظیم است، پیروی میکند.
مزایای استفاده از State Server Mode:
.1پردازش کننده بازیافت (recycl) ،برروی متغییر داده session تاثیر ندارد .
.2می توان درهمان وب سرور و یا دستگاه های مختلف اختصاص داده شده ، ذخیره کرد.
مشکلات State Server Mode
.1راه اندازی مجدد sate service می تواند به از دست دادن session data منجر شود.
.2آهسته تر از است proc mode
SQL Server Session Mode
Session mode یک برنامه کاربردی ASP.NET است ،که توسط SQL Server تعیین و سپس متغیرهای session را در دیتابیس SQL سرور ذخیره می کند. این حالت همچنین یک راه قابل اعتماد برای ذخیره داده ها session و حفظ مقادیر IIS یا وب سرور پس از راه اندازی مجدد است.
برای ذخیره سازی متغیرهای session در یک پایگاه داده SQL سرور ما نیاز به یک دیتابیس و جدول برای ذخیره ی داده ها داریم.
در مسیر: C:\Windows\Microsoft.NET\Framework64\v4.0.30319 یک فایل exe بنام aspnet_regsql موجود است.
سیستم عامل ویندوز و نسخه ای از .NET Framework بر روی دستگاه نصب شده را در نظر میگیریم . در اینجا ، در ویندوز 7 و framework نسخه 4.0 نصب شده است.
رویه (Procedure):
Run و دستور cmd را تایپ میکنیم و پس باز کردن یک پنجره فرمان cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319 cd را وارد کنید.
این به محلی که aspnet_regsql.exe در آن است ،میرود.
ابزار را با استفاده از فرمان زیراجرا نمایید .
.
Web Config
تغییر حالت SQL Server و ارائه SQL connection string
<sessionState mode="SQLServer" customProvider="DefaultSessionProvider" sqlConnectionString="Data Source=abhishek-HP\devAbhi;integrated security=SSPI">
پس از انجام همه تنظیمات مورد نیاز ،در حال حاضر برنامه ما آماده ی اجرا با حالت SQL Server session است
مزایای استفاده از SQL Server Mode
.1گزینه ای بسیار امن و قابل اعتماد برایsession management
Session data .2قادر به ادامه حیات پس از راه اندازی مجدد پردازش کننده ( worker process) یا state راه اندازی مجدد سرویس ویندوز خواهد بود.
.3در مقایسه با حالت های دیگرمقیاس پذیرتر است.
معایب حالت SQL سرور
.1عملکرد آهسته
.2سربار برای serialization و deserialization داده های پیچیده.
Application State
تعریف MSDN می گوید: Application state یک مخزن داده (data repository) در دسترس در تمام کلاسها ی برنامه ASP.NET است . بر خلاف session state ، که مخصوص به یک session کاربر، application state شامل تمام کاربران و session ها است .
Application state در یک نمونه از کلاس HttpApplicationState ذخیره می شود. این کلاس یک دیکشنری است که اشیاء key-value را در معرض نمایش قرار میدهد .
متغیرهای Application state نیز برای ذخیره داده ها هنگامی که navigatiing از یک صفحه به صفحه دیگر ذخیره میشود ،استفاده می شود. چند کاربره بودن Global data به این معنیست که در تمام صفحات و تمام session ها در دسترس خواهد بود. متغیرهای Application state بر روی وب سرور در حافظه پردازش کننده ASP.NET ، ذخیره می شود.
نمونه کد:
افزودن داده ها در متغیرهای نرم افزار
namespace Test { public partial class applicationState : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Application["Counter"] == null) { Application["Counter"] = 0; } TextBox1.Text = Application["Counter"].ToString(); } } protected void Button1_Click(object sender, EventArgs e) { if (Application["Counter"] != null) { int ApplicationCounter = (int)Application["Counter"] + 1; TextBox1.Text = ApplicationCounter.ToString(); Application["Counter"] = ApplicationCounter; } } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("ApplicationStateTest.aspx"); } } }
خواندن داده ها از متغیرهای نرم افزار:
namespace Test { public partial class ApplicationStateTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Application["Counter"] != null) { Label1.Text = Application["Counter"].ToString(); } } } }
یک متغیر application state ، بر خلاف متغیرهای Session زمان پیش فرضی ندارد. زمانی که فرایند hosting برنامه دوباره راه اندازی شود و یا نرم افزار به پایان رسد ، به پایان خواهند رسید.
داده های متغیر Application state ،قابل اعتماد برای web farms و یا گسترش نوع web garden نیست چرا که آنها در میان وب سرور ها یا پردازش کننده های متعدد بر روی همان دستگاه هستند.
یک متغیر application state امن نیست، به این معنی چند کاربر می تواند به متغیر ها دسترسی داشته و می توانند متغیر را دستکاری کنند.
برای اطمینان از درستی داده ها و حل و فصل مسائل همزمانی در زمان استفاده از متغیرهای application state ، برای قفل و باز کردن قفل از متدها باید استفاده شود.
Web farm وضعیتی ست که در آن برنامه های تحت وب بر روی سرورهای مختلف با load balancer توسعه داده میشوند.
Web garden : وضعیتیست که در آن برنامه های تحت وب بر روی سرور با worker processes متعدد توسعه داده شده اند.
مزایای استفاده از application state
.1 از نرم افزار های global data چند کاربری ذخیره شده در حافظه هستند.
.2 دسترسی آسان
.3 بازیابی سریع
معایب application state
.1نرم افزار داده های متغیر(Application variable data) قادر به ادامه حیات برای راه اندازی مجدد IIS و بازیافت پردازش کننده نیست.
.2برای webfarm و webgarden مناسب نیست.
- ASP.net
- 3k بازدید
- 4 تشکر