State management یا مدیریت وضعیت در asp.net قسمت اول : کوکی ها

State management

State management به مجموعه asp.net راهکارهایی جهت حفظ وضعیت/حالت اعم از متغیر و داده ها ی برنامه ها در انتقال از صفحه ای به صفحه دیگر اطلاق می گردد.

گاهی اوقات نیاز میشود که اطلاعات کاربر را دریافت کرده و از آنها در صفحات دیگر استفاده نمود. برای این کار چندین راه وجود دارد که یکی از این روش ها استفاده از کوکی ها میباشد. اکنون در این نوشتار به نحوه ی انتقال متغیرها و داده ها طی دو مرحله ی ۱- ساخت کوکی و قرار دادن متغیرها و داده در آن و ۲- بازیابی متغیرها و داده از کوکی ها می پردازیم.

در بخش اول به معرفی گزینه های ذخیره اطلاعات در صفحه و یا بر روی کامپیوتر کاربر (کلاینت) می پردازیم. در گزینه های این بخش هیچ اطلاعاتی بر روی سرور ذخیره نمی شود.

۱) 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 ) توسط سایر کاربران می تواند دیده شود . لذا اطلاعات خاص را نباید در این کنترل قرار داد.

۴) کوکی ها (Cookies)

یک کوکی بخش کوچکی از اطلاعات است که درون یک فایل متنی text یا در حافظه مرورگر ذخیره می شود. کوکی ها می توانند دارای مدت انقضاء بوده و یا نامحدود زمانی باشند. شما می توانید از کوکی ها برای نگهداری اطلاعات کاربران یا نرم افزارها و … استفاده نمایید. کوکی ها بر روی کامپیوتر کاربر ذخیره شده و هنگامی که مرورگر صفحه ای را درخواست می کند ، کوکی آن صفحه را نیز همراه با درخواست خود به سرور ارسال می کند. سرور می تواند کوکی ها را خوانده و استفاده نماید.

۵) Query String

شی بعدی دخیره در حافظه، کویری استرینگ ها می باشند. Query String ها ، اطلاعاتی هستند که به ادامه آدرس صفحه الحاق می شوند.

URL بالا دارای دو Query String به نام های Category و Price با مقادیر تعیین شده است که بوسیله علامت؟ در انتهای آدرس صفحه اضافه شده اند . معمولا از Query String برای انتقال اطلاعات بین صفحات استفاده شده و دارای حجم محدودی برای ارسال اطلاعات هستند . همچنین این اطلاعات توسط کاربر قابل مشاهده بوده و دارای امنیت بسیار پایینی هستند. برای ارسال اطلاعات از طریق Query String بایستی صفحه را حتما بوسیله متد HTTP GET ارسال نمایید، لذا در هنگام استفاده از متد HTTP POST، این اشیا کار نمی کنند.

گزینه های State management سمت سرور

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 بسیار شبیه Application 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 )

روش اول: تعیین ویژگی‌های کوکی در مجموعه کوکی‌ها (Cookies Collection)

در این روش، شما مستقیماً با استفاده از مجموعه Response.Cookies، مقادیر را به کوکی‌ها اختصاص می‌دهید و ویژگی‌هایی مانند تاریخ انقضا، دامنه، مسیر و … را نیز مشخص می‌کنید. این روش برای مقادیر ساده و سناریوهای ابتدایی مناسب است.

مثال

 

Response.Cookies("UserName").Value = "sajad"
Response.Cookies("UserName").Expires = DateTime.Now.AddDays(5)
Response.Cookies("UserName").Path = "/"

در کد بالا، کوکی‌ای به نام UserName با مقدار “sajad” ساخته شده و مدت زمان اعتبار آن به مدت ۵ روز تعیین شده است. مسیر / به این معناست که این کوکی در تمام صفحات سایت قابل استفاده خواهد بود.

روش دوم: استفاده از شیء HttpCookie

در این روش ابتدا یک شیء از نوع HttpCookie ایجاد می‌کنید، ویژگی‌های آن را تعیین کرده و سپس آن را به مجموعه کوکی‌ها اضافه می‌کنید. این روش در مواقعی که نیاز به ذخیره چندین مقدار در یک کوکی دارید یا می‌خواهید کنترل دقیق‌تری روی ویژگی‌های کوکی داشته باشید، کاربردی‌تر است.

مثال

 

Dim userInfo As New HttpCookie("UserInfo")
userInfo("FirstName") = "sajad"
userInfo("Age") = "27"
userInfo.Expires = DateTime.Now.AddDays(7)
userInfo.Path = "/profile"
Response.Cookies.Add(userInfo)

در این مثال، یک کوکی به نام UserInfo تعریف شده که شامل دو مقدار FirstName و Age است. این کوکی به مدت ۷ روز معتبر خواهد بود و فقط در صفحات مسیر /profile قابل دسترسی خواهد بود.

بازیابی کوکی‌های پیچیده‌تر

برای خواندن کوکی‌هایی که به صورت مجموعه‌ای (مانند مثال بالا) ایجاد شده‌اند، می‌توان از کد زیر استفاده کرد:

Dim userInfo As HttpCookie
userInfo = Request.Cookies("UserInfo")

If Not userInfo Is Nothing Then
    Dim firstName As String = userInfo("FirstName")
    Dim age As String = userInfo("Age")
    Response.Write("First Name: " & firstName & "<br>")
    Response.Write("Age: " & age)
Else
    Response.Write("No cookie found.")
End If

نکات امنیتی و فنی مهم در استفاده از کوکی‌ها

1.اطلاعات حساس را در کوکی ذخیره نکنید: کوکی‌ها در سمت کلاینت ذخیره می‌شوند و کاربران می‌توانند آنها را مشاهده یا حتی دستکاری کنند. اگر مجبور به استفاده از کوکی برای داده‌های نسبتاً مهم هستید، حتماً آنها را رمزنگاری نمایید.

2.محدودیت حجم کوکی‌ها: مرورگرها معمولاً محدودیت‌هایی برای تعداد کوکی‌ها (حدود ۲۰ کوکی برای هر دامنه) و حجم کل آن‌ها (حدود ۴ کیلوبایت برای هر کوکی) دارند.

3.استفاده از کوکی‌های امن (Secure): برای ارسال کوکی تنها از طریق پروتکل HTTPS می‌توانید خاصیت Secure را روی کوکی فعال کنید.

4.تنظیم HttpOnly: با فعال کردن ویژگی HttpOnly کوکی، از دسترسی آن توسط اسکریپت‌های سمت کلاینت (مانند JavaScript) جلوگیری می‌شود.

نتیجه‌ گیری

مدیریت وضعیت (State Management) یکی از مفاهیم کلیدی در توسعه برنامه‌های وب است، چراکه HTTP یک پروتکل بدون وضعیت (Stateless) بوده و بدون استفاده از این تکنیک‌ها، حفظ داده‌ها میان درخواست‌های مختلف کاربر امکان‌پذیر نخواهد بود.

روش‌های متعددی برای نگهداری داده‌ها وجود دارد که بسته به نیاز، امنیت، حجم داده و نوع استفاده، می‌توان از گزینه‌های سمت کلاینت (مانند ViewState، HiddenField، کوکی و Query String) یا سمت سرور (مانند Session، Application و Profile) بهره گرفت. برای مثال، اگر حجم داده‌ها کم و امنیت مسئله مهمی نباشد، استفاده از کوکی‌ها یا Query String می‌تواند راهکاری مناسب و سریع باشد. اما در شرایطی که اطلاعات حساس و امنیت‌محور هستند یا نیاز به مدیریت پیچیده‌تری وجود دارد، استفاده از Session یا Profile توصیه می‌شود.

در نهایت، انتخاب روش مناسب برای مدیریت وضعیت باید با در نظر گرفتن معیارهایی مانند امنیت، کارایی، پایداری، نیاز به ماندگاری داده، و ساختار کلی برنامه انجام گیرد. در بسیاری از پروژه‌ها، ترکیب چند روش به صورت بهینه می‌تواند بهترین نتیجه را به همراه داشته باشد.

آخرین نوشته ها

تماس با ما

 کرج، شاهین ویلا، بلوار باهنر ، نرسیده به میدان باهنر ، ساختمان آکو مد ،طبقه دوم واحد4

 91014618

  info@shopingserver.net

با تلفن ثابت بدون پیش شماره قابل شماره گیری هست و در صورتی که با تلفن همراه قصد تماس گرفتن دارید از پیش شماره استان خود را اول شماره وارد نمایید.

مطالب مرتبط