در برنامه نویسی تحت وب، مانند ASP.NET، صفحات وب از طریق پروتکل HTTP با هم تبادل اطلاعات دارند. همانطور که می دانید این پروتکل Stateless است.
این بدین معنی است که کلیه اطلاعات مرتبط با صفحه وب مورد نظر و کنترل های مربوط به آن از بین می روند. به عنوان مثال اگر اطلاعاتی درون یک کنترل TextBox
درج شده باشد، این اطلاعات پس از ارسال صفحه حذف می شوند. اما خوشبختانه، ASP.NET چند راهکار مختلف را برای حل این قبیل مشکلات ارائه نموده است که در ادامه مقاله به
توضیح آنها خواهیم پرداخت.
معرفی Session و ViewState
در برنامه های ویندوز، State ها به طور اتوماتیک Handle میشوند. یکی از علل آن وجود حافظه فراوانی است که در اختیار برنامه
های تحت ویندوزی قرار می گیرد. اما در برنامه های وب، منطق به گونه ای دیگر است. به عنوان مثال ممکن است در یک وب سایت صد کاربر یک برنامه وب را به طور همزمان بر
روی یک وب سرور اجرا نمایند. همانطور که در قبل گفته شد پروتکل HTTP دارای ماهیت Stateless است. پس از هر درخواست و پاسخ به این پروتکل، ارتباط
Client با سرور قطع خواهد شد و کلیه اطلاعات از دست خواهد رفت. ASP.NET برای نگهداری اطلاعات و انتقال آنها بین صفحات مختلف دو گروه از State ها
را معرفی می نماید:
1- State های سمت کلاینت
2- State های سمت سرور
از گروه State های سمت کلاینت می توان به ViewState، Cookie، Hidden Field، Control State و Query String اشاره نمود.
از گروه State های سمت سرور نیز می توان به Session و Application اشاره نمود، که هدف از این مقاله مقایسه Session با
ViewState می باشد.
ViewState یکی از مهمترین State های سمت کلاینت است. در واقع ViewState مقادیری که داخل صفحه قرار
دارند را در زمان Postback در خود ذخیره نماید. به طور ساده تر می توان گفت ASP.NET از این مکانیزم برای به خاطر سپردن State استفاده می کند.
زمان
پردازش صفحه در سرور، وضعيت صفحه و کنترل های آن در يک رشته ذخيره می شوند و بعد از ارسال صفحه به سرور، اولين عملياتی که انجام می گیرد آن است که ابتدا رشته ی ایجاد شده،
بررسی و مقادير ذخيره شده در آن استخراج و اطلاعات مربوطه در صفحه، دوباره بازيابی می شود و ViewState باز گردانده می شود. همچنین اگر در
یک صفحه، نیاز به انتقال مقداری از متدی به متد دیگر یا از رویدادی به رویداد دیگر باشد، بهترین روش استفاده از ViewState است.
نکته1: هر يک از کنترل های موجود بر روی صفحه وب، شامل يک Property به نام ViewState بوده که از کلاس پايه ای
Control ارث بری شده است.
نکته 2: عمر ViewState فقط به زمان باز بودن صفحه جاری (Lifecycle) بستگی دارد و بعد از بستن صفحه و یا رفتن به صفحه ای دیگر، از بین
می رود.
نکته 3: استفاده زیاد از ViewState موجب کندی برنامه می گردد. برنامه نویس باید ViewState کنترل هایی که نیاز به Postback ندارند را غیر فعال
نماید.
نکته 4: ViewState درواقع یک روش پیش فرض جهت ذخیره اطلاعات صفحه و کنترل های آن در بین رفت و برگشت ها به سرور است.
مزایا:
- پیاده سازی آن آسانتر از State های دیگر است.
- به منابع سرور نیاز ندارد.
- دارای ویژگی های امنیتی پیشرفته، مانند کدگذاری و فشرده سازی می باشد.
معایب:
- در صورتی که برنامه نویس تصمیم داشته باشد تا مقادیر بزرگتری از داده ها را ذخیره کند، به علت اینکه
ViewState تنها با صفحه در ارتباط است، ممکن است بر روی سرور بار اضافه باشد.
- بر روی ابزار های همراه قابل پشتیبانی نیست
همانطور که در قبل نیز توضیح داده شد، زبان ASP.NET امکانات بسیار خوبی را برای کار با State ها در اختیار برنامه نویسان
قرار داده است. Session در واقع یک امکان برای ذخیره اطلاعات در حافظه می باشد. در واقع تمرکز Session بر روی وضعیت مرورگر جاری است. فرض کنید چند
کاربر به طور همزمان از یک برنامه وب استفاده می کنند، در این حالت هر کاربر Session مربوط به خود را دارد. نکته بسیار مهمی که وجود دارد، این است که اگر کاربر به
عنوان مثال مرورگر خود را ببندد و مجددا آن را باز نماید، Session ایجاد شده با Session قبلی متفاوت خواهد بود.
یکی از کاربردهای Session، شناسایی کلاینتی است که درخواستی را به سرور ارسال نموده و به علت آن که ارسال درخواست به اطلاعات، مربوط به آن کلاینت، در حافظه سرور می باشد. Session امکان خوبی برای ذخیره
اطلاعاتی از قبیل آیتم های خریداری شده توسط کاربر از یک سایت، نگهداری اطلاعات آنها در سبد خرید و همچنین نگهداری نام کاربری و رمز عبور کاربران در زمان حرکت از یک صفحه به صفحه دیگر می باشد.
در هنگام ساخت یک Session یک کوکی نیز در سرور با مقدار آیدی Session ایجاد می گردد، دلیل آن عمومی نبودن مقادیر Session است و
همانطور که در قبل توضیح داده شد باید به ازای هر کاربر ایجاد گردد .
این State بر روی حافظه سرور ذخیره می شود و به علت اینکه حافظه سرور بسیار مهم است، باید از آن بجا استفاده نمود. زیرا استفاده نابجا ممکن است به سرور
صدمه بزند.
ارائه دهندگان میزبانی وب، یک زمان را جهت TimeOut شدن Session ها قرار می دهند تا حافظه به خوبی مدیریت شود.
تفاوت Session و ViewState
1)
Session جهت نگهداری اطلاعات در سمت سرور و
ViewState برای نگهداری اطلاعات در سمت کلاینت می باشد.
2) از
Session برای جا به جایی اطلاعات موقت که نباید در دسترس کلاینت قرار بگیرد، استفاده می شود و از
ViewState برای انتقال یک مقدار یا یک متد از یک
صفحه به صفحه دیگر استفاده می شود.
3) می توان
Session را به یک ساختمان داده تشبیه کرد که در زمان مراجعه به یک URL ایجاد می شود و
ViewState یک دیکشنری از اشیاء مورد نظر
برای ذخیره و بازیابی اطلاعات مورد نیاز جهت استفاده در فرم های وب است.
4)
ViewState در زمان Postback صفحات اطلاعات ارسالی و دریافتی در Refresh مجدد در آن ذخیره می شوند، ولی از
Session برای
ردگیری حرکت کاربر و نگهداری اطلاعات مربوط به هر کاربر استفاده می شود.
5) از لحاظ امنیت اطلاعات،
Session دارای امنیت بالاتری است و کاربران قادر به مشاهده آنها نیستند ولی
ViewState در صورت انتخاب View
Source
، در مرورگرها قابل مشاهده است.
6)
Session ها دارای زمان انقضاء می باشند. همانطور که در قبل توضیح داده شد، بوسیله TimeOut می توان آن را تعیین نمود و اگر کاربر هیچ عملی انجام ندهد که
عمل Postback رخ دهد، بعد از اتمام زمان انقضاء از بین خواهد رفت. ولی عمر
ViewState به زمان باز بودن صفحه جاری بستگی دارد و اگر صفحه بسته شود از
بین می رود.
7) اغلب از
Session جهت نگهداری اطلاعات کاربران استفاده می گردد، ولی از
Viewstate برای نگهداری اطلاعات کنترلهای مربوط به هر صفحه
استفاده میشود.
استفاده به جا از State ها در برنامه های تحت وب بسیار حائز اهمیت است. یک سرویس دهنده وب می تواند به هزاران درخواست با کارائی مطلوب پاسخ
دهد. این مهم مستلزم استفاده درست از State ها است تا در صورت ازدیاد درخواست ها، با مشکل حافظه مواجه نشود. همچنین در مواردی که لازم است تا اطلاعات بین چندین
عملیات کاربران نگهداری شوند، باید از راهکارهای مناسب جهت مدیریت State ها استفاده نمود.