فرم هاي وب و فريمورک ASP.NET از طريق پروتکل Http با يکديگر مبادله اطلاعاتي دارند( مرورگر و سرويس دهنده وب ) . Http يک پروتکل stateless است . صفحات وب زمانيکه از سرويس گيرنده درخواستي براي آنان نزد سرويس دهنده واصل گردد ،مجددا" ايجاد خواهند شد. اين بدان معني است که تمامي اطلاعات مرتبط با صفحه و کنترل هاي مربوطه بر روي صفحه گم ( حذف ) مي شوند. مثلا" اگر کاربري اطلاعاتي را در يک TextBox درج کرده باشد ، اطلاعات درج شده پس از ارسال صفحه از طريق مرورگر به سرويس دهنده حذف خواهند شد. براي غلبه بر اين نوع از مشکلات ،ASP.NET راهکارهاي متفاوتي در اين زمينه را ارائه نموده است. راهکارهاي ارائه شده به دو گروه عمده تقسيم مي گردنند:
? Client-Based state management
? Server-Based state management
در ادامه به تشريح امکانات ارائه شده در هر يک از گروه هاي فوق خواهيم پرداخت .
گزينه هاي Client-Based
در اين بخش به بررسي امکاناتي پرداخته مي شود که بکمک آنها مي توان اطلاعات مورد نظر را بر روي صفحه و يا بر روي کامپيوتر سرويس گيرنده ذخيره نمود.
? View State . يک ديکشنري از اشياء مورد نظر براي ذخيره و بازيابي اطلاعات مورد نياز جهت استفاده در فرم هاي وب است . زمانيکه صفحه پردازش مي گردد ،وضعيت جاري صفحه بهمراه کنترل هاي مربوطه در يک رشته ذخيره و بعنوان يک فيلد مخفي در صفحه نگهداري مي شوند. زمانيکه صفحه مجددا" براي سرويس دهنده ارسال مي گردد در ابتدا رشته فوق بررسي و مقادير ذخيره شده در آن استخراج و اطلاعات مربوطه در صفحه مجددا" بازيابي خواهند شد. هر يک از کنترل هاي موجود بر روي يک فرم وب ( خود صفحه را هم شامل مي شود) شامل يک صفت Viewstate بوده که از کلاس پايه اي Control براي آنها به ارث رسيده است. Viewstate در فريمورک ASP.NET بمنظور ذخيره خودکار مقادير مربوط به صفحه و کنترل هاي موجود استفاده مي گردد. زمانيکه صفحه براي سرويس دهنده پست مي گردد ،يکي از اولين عملياتي که در اين زمينه انجام خواهد گرفت ،برگرداندن viewstate است . صفت viewstate در صفحات وب در يک فيلد مخفي نگهداري مي گردد. بمنظور استفاده از صفت فوق مي بايست فرم داراي الماني با نام <form runat="Server"> باشد. براي ذخيره مقدار مورد نظر در viewstate مي بايست يک المان جديد ايجاد و مقدار مورد نظر را در آن ذخطره نمود. فرمت داده هائي که مي بايست در المان ذخيره نمود از نوع string است بنابراين در ابتدا مي بايست تبديلات مربوطه را بر روي آن اعمال نمود.
ViewState("color") = "yellow" |
براي بازيابي اطلاعات ذخيره شده در Viewstate مي توان نام المان مربوطه را استفاده تا مقدار ذخيره شده در آن برگردانده شود.
Dim strColor as String strColor = CStr(ViewState("color")) |
? فيلدهاي مخفي . ASP.NET اين امکان را فراهم مي آورد که از فيلدهاي مخفي در يک فرم استفاده کرد. يک فيلد مخفي قابل مشاهده در مرورگر نبوده اما مي توان صفات مربوط به آن را تغيير داد. زمانيکه صفحه اي براي سرويس دهنده ارسال مي گردد ،محتويات فيلد مخفي از طريق مجموعه Http Form ارسال خواهد شد. يک فيلد مخفي صرفا" يک مقدار را در خود ذخيره کرده و مي بايست با صراحت به صفحه وب آن را اضافه نمود. ASP.NET با معرفي کنترل htmlinputhidden امکان تعريف يک فيلد مخفي را فراهم نموده است . بمنظور استفاده از فيلدهاي مخفي در يک صفحه مي بايست صفحه مورد نظر بر اساس متد Post پروتکل Http ارسال گردد .در صورتيکه اطلاعات ذيربط بر اساس متد GET ارسال گردنند ،امکان استفاده از فيلدهاي مخفي وجود نخواهد داشت .
? Cookies . يک کوکي شامل حجم کوچکي از داده ها است که در يک فايل متني بر روي سيستم فايل سرويس گيرنده و يا در حافظه مرورگر سرويس گيرنده ذخيره مي گردد. اطلاعات ذخيره شده شامل موارد مرتبط با يک صفحه بوده که از طريق سرويس دهنده براي سرويس گيرنده ارسال مي گردد. کوکي ها مي توانند بصورت موقت و يا دا ئم ايجاد گردنند. از کوکي مي توان براي ذخيره اطلاعات مرتبط با يک سرويس گيرنده خاص ،يک session و يا يک برنامه استفاده کرد. کوکي ها بر روي دستگاههاي سرويس گيرنده ذخيره و زمانيکه مرورگر درخواست يک صفحه را داشته باشد ،اطلاعات ذخيره شده در کوکي بهمراه ساير اطلاعات براي سرويس دهنده ارسال خواهند شد. سرويس دهنده از اطلاعات ذخيره شده در کوکي ها با توجه به شرايط حاکم بر نامه استفاده خواهد کرد.
? Query String(QS) . QS شامل اطلاعاتي است که به انتهاي يک URL صفحه اضافه خواهد شد. مثلا"
http://www.contoso.com/listwidgets.aspx?category=basic&price=100 |
در دستور فوق QS با ? ، شروع و داراي دو مقدار مربوط به فيلدهاي Category و Price است . روش فوق يک راه حل ساده و در عين حال محدود براي پشتيباني از اطلاعات مربوط به وضعيت يک صفحه است . با استفاده از QS مي توان بسادگي اطلاعاتي را از يک صفحه به صفحه ديگر ارسال نمود. اغلب مرورگرها و دستگاههاي سرويس گيرنده حداکثر طول مجاز براي يک URL را دويست و پنجاه و شش حرف در نظر مي گيرنند. بمنظور استفاده از روش فوق مي بايست صفحه را از طريق متد GET پروتکل Http ارسال نمود.
گزينه هاي Server-Based
ASP.NET روش هاي متفاوتي براي پشتيباني از وضعيت اطلاعاتي يک صفحه از جايگاه سرويس دهنده ارائه نموده است . در ادامه به تشريح برخي از آنان خواهيم پرداخت .
? Application State ، تکنولوژي ASP.NET ، اين امکان را فراهم نموده که با استفاده از ذخيره اطلاعاتي وضعيت يک برنامه ،اطلاعات ذخيره شده را براي تمام سرويس گيرندگاني که به برنامه متصل هستند ،قابل استفاده نمود. مسئوليت اين کار برعهده کلاس HttpApplication گذاشته شده است . در حقيقت روش فوق يک محل ذخيره سازي سراسري را ارائه داده تا از طريق اين فضاي مشترک دستيابي به اطلاعات آن براي تمامي صفحات وب موجود در يک برنامه فراهم گردد.
? Session state . ساختمان داده ئي است که در زمان مراجعه به يک URL خاص ايجاد خواهد شد. مسئوليت اين کار برعهده کلاس HttpSessionStateگذاشته شد ه است . ASP.NET اين امکان را فراهم نموده که مقادير مربوط به يک Session خاص را براي هر کاربر و به ازاي يک برنامه بصورت جداگانه ذخيره نمود . روش فوق نظير روش Application state بوده با اين تفاوت که حوزه عملکردي آن به Current browser session برمي گردد. در صورتيکه کاربران متعددي از برنامه استفاده مي نمايند ،هر يک داراي يک Session متفاوت و مختص بخود خواهند بود. در چنين حالتي اگر کاربري ارتباط خود را با برنامه قطع و مجددا" به برنامه متصل گردد ،کاربر مورد نظر داري يک Session جديد شده که با Session قبلي کاملا" متفاوت خواهد بود.
? DataBase Support . پشتيباني و مديريت وضعيت اطلاعاتي يک برنامه ( يا صفحات ) با استفاده از تکنولوژي بانک هاي اطلاعاتي يک راهکار مفيد در اين زمينه و خصوصا" موارديکه حجم اطلاعات ذخيره شده زياد بوده و يا دامنه پشتيباني از وضعيت يک برنامه طولاني باشد و يا بخواهيم وضعيت يک برنامه پس از را ه اندازي سرويس دهنده همچنان نگهداري شوند ،بسيار مفيد و کارساز خواهد بود. روش فوق اغلب بهمراه کوکي ها استفاده مي گردد.