State management در asp.net قسمت اول : کوکی ها
گاهی اوقات نیاز میشود که اطلاعات کاربر را دریافت کرده و از آنها در صفحات دیگر استفاده نمود. برای این کار چندین راه وجود دارد که یکی از این روش ها استفاده از کوکی ها میباشد. اکنون در این نوشتار به نحوه ی انتقال متغیرها و داده ها طی دو مرحله ی ۱- ساخت کوکی و قرار دادن متغیرها و داده در آن و ۲- بازیابی متغیرها و داده از کوکی ها می پردازیم.
State Managemant به مجموعه راهکارهایی جهت حفظ وضعیت/حالت اعم از متغیر و داده ها ی برنامه ها در انتقال از صفحه ای به صفحه دیگر اطلاق می گردد.
در بخش اول به معرفی گزینه های ذخیره اطلاعات در صفحه و یا بر روی کامپیوتر کاربر ( کلاینت ) می پردازیم . در گزینه های این بخش هیچ اطلاعاتی بر روی سرور ذخیره نمی شود .
۱) View State : این خاصیت یک شی فهرست وار را برای ذخیره سازی اطلاعات بین درخواست های متعدد ارسال و دریافت صفحه به سرور ، برای آن صفحه فراهم می کند . این شی روش پیش فرض ذخیره اطلاعات صفحه و کنترل های موجود در آن بین رفت و برگشت ها به سرور است . هنگامی که صفحه به سرور ارسال می شود ، وضعیت جاری صفحه و اطلاعات موجود در کنترل های آن ، در قالب یک متن رمزنگاری شده و درون یک یا چند کنترل Hidden Field ذخیره می شوند . اگر حجم اطلاعات ذخیره شده از مقدار تعیین شده در خاصیت MaxStateFieldLength بیشتر باشد ، صفحه از چندین کنترل Hidden Field استفاده خواهد کرد . هنگامی هم که صفحه از سرور برمی گردد ( Postback می شود ) ، اطلاعات موجود در شی متنی View State را خوانده و آنها را به کنترل های مرتبط برمی گرداند.
۲) Control State : برخی اوقات شما نیاز دارید تا اطلاعات وضعیت یک کنترل خاص را در یک مقطع برای کارایی صحیح اش نگهداری کنید . برای مثال فرض کنید که یک کنترل دلخواه ( Custom Control ) را طراحی کرده اید که دارای لبه ها ( Tab ) ی مختلفی است که اطلاعات گوناگونی را نگهداری می کند . مثلا در جریان رفت و برگشت صفحه به سرور برای این کنترل خاص نیاز دارید که بدایند قبل از ارسال صفحه به سرور ، کنترل اطلاعات کدام لبه را نشان می داده است . از خاصیت View State برای نگهداری وضعیت این کنترل می توانید استفاده نمایید اما این ویژگی قابل غیرفعال کردن در صفحه است و ممکن است سهوا یا عمدا خاموش شده و باعث از کار افتادن کارایی کنترل فوق شود . برای حل این شکل ، Asp.Net استفاده ار ویژگی Control State را فراهم کرده است . به وسیله شی Control State شما می توانید وضعیت جاری یک کنترل را قبل از ارسال به سرور در صفحه ذخیره نموده ، بدون اینکه امکان غیرفعال شدن آن وجود داشته باشد.
۳) Hidden Fields : زبان Asp.Net این امکان را به شما می دهد تا اطلاعات خود را در فیلدهای مخفی یا کنترل HiddenField ذخیره نمایید . این کنترل ها بصورت تگ های input از نوع Hidden Field بر روی صفحات Html ، رندر می شود . کنترل Hidden Fields خروجی ظاهری بر روی صفحه ندارد اما مانند سایر کنترل های Asp.Net می توانید خواص مورد نظرتان را برای آن تعیین نمایید . هنگامی که صفحه به سرور ارسال می شود ، مقدار یک کنترل Hidden Fields همراه با مقادیر سایر کنترل های صفحه از طریق یک پروتکل HTTP Form ارسال می شود . کنترل Hidden Fields اطلاعات را درون خاصیت Value خود نگهداری می کند و بصورت مستقیم قابل تعیین است.
نکته ۱ : اگر می خواهید که یک کنترل Hidden Fields کارایی صحیح ای داشته و اطلاعات آن در زمان Postback صفحه قابل دسترسی باشد ، باید صفحه را توسط یک متد HTTP Post به سرور ارسال نمایید . اگر صفحه را به واسطه کلیک بر روی یک لینک و یا از طریق متد HTTP GET به سرور ارسال نمایید ، این کنترل کار نخواهد کرد .
نکته ۲ : با وجود اینکه اطلاعات کنترل Hidden Fields بر روی صفحه قابل مشاهده نیست ، اما از طریق مشاهده کد صفحه ( Source Code ) توسط سایر کاربران می تواند دیده شود . لذا اطلاعات خاص را نباید در این کنترل قرار داد .
[irp posts=”۹۹۸۲″ name=”Postback چیست و استفاده از آن در ارتباط بین سرور و برنامه تحت وب در ASP.Net”]
۴) کوکی ها (Cookies) : یک کوکی بخش کوچکی از اطلاعات است که درون یک فایل متنی text یا در حافظه مرورگر ذخیره می شود . کوکی ها می توانند دارای مدت انقضاء بوده و یا نامحدود زمانی باشند . شما می توانید از کوکی ها برای نگهداری اطلاعات کاربران یا نرم افزارها و … استفاده نمایید . کوکی ها بر روی کامپیوتر کاربر ذخیره شده و هنگامی که مرورگر صفحه ای را درخواست می کند ، کوکی آن صفحه را نیز همراه با درخواست خود به سرور ارسال می کند . سرور می تواند کوکی ها را خوانده و استفاده نماید.
در مقاله ای تحت عنوان cookies چیست و نحوه استفاده از کوکی در PHP مفصلا دراینباره صحبت کرده ایم.
۵) Query String : شی بعدی دخیره در حافظه ، کویری استرینگ ها می باشند . Query String ها ، اطلاعاتی هستند که به ادامه آدرس صفحه الحاق می شوند .
URL بالا دارای دو Query String به نام های Category و Price با مقادیر تعیین شده است که بوسیله علامت ؟ در انتهای آدرس صفحه اضافه شده اند . معمولا از Query String برای انتقال اطلاعات بین صفحات استفاده شده و دارای حجم محدودی برای ارسال اطلاعات هستند . همچنین این اطلاعات توسط کاربر قابل مشاهده بوده و دارای امنیت بسیار پایینی هستند . برای ارسال اطلاعات از طریق Query String بایستی صفحه را حتما بوسیله متد HTTP GET ارسال نمایید ، لذا در هنگام استفاده از متد HTTP POST ، این اشیا کار نمی کنند .
گزینه های مدیریت وضعیت سمت سرور :
Asp.Net گزینه های مختلفی را برای نگهداری اطلاعات و وضعیت صفحه بر روی سرور به جای ذخیره آنها در کامپیوتر کاربر در اختیار طراح قرار داده است . با استفاده از امکانات ذخیره سازی اطلاعات بر روی سرور ، می توانید حجم اطلاعات ارسالی از وضعیت و داده های صفحه به سرور را کاهش داده ، ولی در مقابل از منابع سخت افزاری آن بیشتر استفاده خواهید نمود .
۱) Application State : زبان Asp.Net این امکان را به شما می دهد تا مقادیر ( Values ) را به وسیله قابلیت Application State که نسخه ای از کلاس HTTP Application State است ، برای هر برنامه وب فعال ، نگهداری کنید . Application State ، یک حافظه عمومی ( Global ) بوده که از طریق تمامی صفحات برنامه وب قابل دسترسی است . بنابراین حافظه برای نگهداری اطلاعات عمومی و اطلاعاتی که باید در هر بار ارسال صفحات به سرور مورد استفاده قرار بگیرد ، مناسب است . Application State در جفت های نام / مقدار ، برای هر درخواست به یک آدرس مشخص URL ایجاد می شوند.
۲) Session State : زبان Asp.Net امکان دیگری برای ذخیره اطلاعات در حافظه به نام Session State را که نسخه ای از کلاس HTTP Session State است ، نیز در اختیار ما قرار داده است. Session State بسیار شبیه Aplication State است با این تفاوت که تمرکز آن بر روی وضعیت مرورگر جاری است . اگر چندین کاربر بطور همزمان از برنامه وب شما استفاده نمایند ، هر کاربر نسخه Session متعلق به خود را خواهد داشت . همچنین اگر کاربر استفاده از برنامه وب را رها کرده و مجددا پس از مدتی بازگردد ، Session اول با Session دوم فرق خواهد داشت . Session State نیز بصورت جفت مقادیر نام/مقدار برای نگهداری اطلاعاتی که در هربار ارسال صفحه به سرور مورد نیاز است ، به کار می رود . بطور کلی از این خاصیت می توان برای موارد زیر استفاده کرد :
- شناسایی مرورگر یا کامپیوتر کلاینتی که درخواست به سرور ارسال نموده و ارسال درخواست آن به اطلاعات مرتبط در حافظه سرور .
- نگهداری اطلاعات مورد نظر بر روی سرور برای استفاده در چندین مرورگر یا کلاینت در یک Session واحد .
- فعال کردن رویدادهای طراحی شده برای مدیریت Session .
۳) 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 .
راههای انتقال متغیرها و داده از یک صفحه به صفحه دیگر با استفاده از Cookie
مرحله اول: ساخت کوکی و قرار دادن متغیرها و داده در آن
برای این منظور ابتدا باید از دستو Response.Cookies برای ساخت یک کوکی استفاده نمود. توجه داشته باشید که این دستور را باید قبل از تگ <html> بکار ببرید. بطور مثال با استفاده از دستور زیر دو کوکی ایجاد می کنیم که هرکدام به ترتیب دارای یک متغییر به نام age است و مقدار ۲۷ و یک متغیر به نام firstname با مقدار sajad است.
<%
Response.Cookies(“firstname”)=”sajad”
Response.Cookies(“age”)=”۲۷″
%>
به دلیل اینکه کوکی ها در کامپیوتر لوکال بازدید کننده ذخیره می شوند، شما میتوانید برخی از تنظیمات را برای کوکی ها اعمال کنید. بطور مثال شما میتوانید مشخص کنید یک کوکی تا چه زمانی بر روی کامپیوتر لوکال بازدید کننده باقی بماند، برای نمونه در کد زیر این تاریخ را May 10,2012 مشخص شده است.
<%
Response.Cookies(“firstname”)=”sajad”
Response.Cookies(“firstname”).Expires=#May 10,2015#
Response.Cookies(“age”)=”۲۷″
Response.Cookies(“age “).Expires=#May 10,2012#
%>
مرحله دوم: بازیابی متغیرها و داده از کوکی ها
با استفاده از دستور Request.Cookies میتوان متغیرها و داده را از کوکی ها بازیابی کرد. بطور مثال با استفاده از دستورات زیر میتوان متغیر های firstname و age را که در بالا ایجاد کرده و مقدار داده بودیم را بازیابی کرد.
<%
fname=Request.Cookies(“firstname”)
response.write(“your first name is= ” & fname)
age=Request.Cookies(“age”)
response.write(“your age is= ” & age)
%>
در ASP.Net دو روش جهت نوشتن یک کوکی در ماشین کاربر وجود دارد:
تعیین ویژگی های کوکی در مجموعه کوکی ها ( cookies collection )
ساختن نمونه ای از شی HttpCookie و ارسال آن به به مجموعه کوکی های ( cookies collection )
نکته مهم : کوکی ها می باید قبل از خروجی صفحه ASP.Net ایجاد شده یا اصطلاحا” رندر ، تعریف و مقدار دهی گردند، به عنوان مثال می بایست آن را در رویداد Page_Load صفحه تعریف نمود و نه در تابعی همچون Page_Unload .