زمانی که اطلاعات connection string در بخش appSetting ذخیره می گردد ، برای یک کنترل مرتبط با داده نظیر SqlCacheDependency و یا MembershipProvider امکان دستیابی به اطلاعات وجود ندارد .
ایمن سازی Connection string با استفاده از الگوریتم های رمزنگاری چالش های خاص خود را دارد .
ویژگی فوق صرفا" در ارتباط با برنامه های ASP.NET نبوده و تمامی برنامه های دات نت نظیر Windows Forms , Web Service و سایر موارد دیگر را نیز شامل می شود .
با توجه به این که اطلاعات connection string مستقل از بخش appSetting ذخیره می گردد ، می توان آنان را با استفاده از مجموعه متد ConnectionString بازیابی نمود .
کد زیر نحوه ذخیره connection string در فایل Web.config را نشان می دهد .
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> |
نحوه بازیابی اطلاعات یک connection string در برنامه :
Public Sub Page_Load (sender As Object, e As EventArgs) |
پیکربندی Session State
state management یکی از مسائل مهم در زمان پیاده سازی برنامه های وب است که می بایست با توجه به اهمیت آن به درستی با ابعاد آن آشنا گردید . در گذشته ای نه چندان دور ( ده سال پیش ) ، با این که برای پیاده سازی برنامه های کامپیوتری از معماری client-server استفاده می گردید ولی عملا" در معماری فوق ما دارای یک fat client و یک fat server می باشیم که برای ذخیره state از امکانات موجود در سمت سرویس دهنده و یا سرویس گیرنده استفاده می شود . با توجه به این که در معماری فوق ، یک ارتباط دائم بین سرویس گیرندگان و سرویس دهنده وجود دارد برای ذخیره و نگهداری state با مشکل خاصی مواجه نمی شویم .
در برنامه های وب گفتگوی بین یک سرویس گیرنده و یک سرویس دهنده از طریق پروتکل HTTP انجام می شود و جملگی به خوبی می دانیم که این پروتکل یک پروتکل stateless است و ارتباط با یک سرویس دهنده از راه دور در زمان مورد نیاز ایجاد و در ادامه و پس از سرویس دهی ، غیرفعال می شود . با این که HTTP 1.1 از یک روش Keep-alive استفاده می نماید ولی سرویس دهنده نمی تواند درخواست های ایجاد شده توسط یک سرویس گیرنده را تشخیص دهد .
برای ذخیره و نگهداری state از گزینه های متعددی استفاده می گردد که session یک نمونه در این زمینه است .شی Session متداولترین محلی است که می توان اطلاعات مربوط به وضعیت برنامه و کاربران را در آن ذخیره و نگهداری نمود . برای پیاده سازی session از یک Hashtable استفاده می گردد و داده بر اساس ترکیب زوج کلید و مقدار ذخیره می شود .
Session در ASP.NET 2.0 یک مفهوم جدید نیست و متاثر از ماهیت پروتکل HTTP است ( Stateless ) و قبل از ASP.NET و حتی ASP کلاسیک وجود داشته است .
داده Session در چه مکانی ذخیره می گردد ؟
شی Session یک روش موثر برای ذخیره و نگهداری وضعیت یک برنامه و یا کاربران آن را ارائه می نماید. ASP.NET به همراه سه Storage Provider ارائه شده است :
In-Process Session State Store : اطلاعات session در Cache ( حافظه ) ذخیره می گردد .
Out-of-Process Session State Store : اطلاعات Session در State Server Service ذخیره می گردد ( asp_net_state.exe )
Sql Session State Store : اطلاعات session در بانک اطلاعاتی SQL ذخیره می گردد . برای پیکربندی از aspnet_regsql.exe استفاده می گردد .
در ASP.NET 2.0 ، یک قابلیت جدید با نام custome به مجموعه فوق اضافه شده است . با استفاده از گزینه فوق ، پیاده کنندگان می توانند داده session را در یک مکان دائم ذخیره نمایند . مثلا" ASP.NET 2.0 امکان ذخیره داده session را در برخی بانک های اطلاعاتی نظیر Oracle,DB2 و یا Sybase ندارد . در صورتی که بخواهیم داده session را در یکی از بانک های اطلاعاتی فوق و یا یک فایل XML ذخیره نمائیم ، می توان از یک Provider class سفارشی استفاده نمود .
برای پیکربندی اطلاعات session از عنصر <sessiononState > در فایل web.config استفاده می گردد :
<configuration> |
در ادامه به بررسی مختصر هر یک از گزینه های فوق خواهیم پرداخت .
In-Process Session State Store : متداولترین و در عین حال سریعترین روش پیکربندی session state در ASP.NET 2.0 می باشد ( مقدار mode برابر inproc در نظر گرفته می شود ) .در این روش داده Session در cache داخلی HttpRuntime ذخیره شده و به صورت live قابل دستیابی است . با توجه به این که داده session در حافطه ذخیره می گردد ، به سرعت می توان به آن دستیابی داشت ( ضرورتی ندارد داده از یک مکان دیگر به درون حافظه انتقال یابد ). داده seesion تا زمان اعتبار session در حافظه موجود می باشد و پس از time out فضای اشغال شده آزاد می گردد .
Out-of-Process Session State Store : داده session در یک process که به عنوان یک سرویس ویندوز اجراء می گردد ، نگهداری می شود ( aspnet_state.exe ) .
State Service به صورت پیش فرض اجراء نمی گردد و برای فعال کردن آن می توان از دستور net start aspnet_sate استفاده نمود . به صورت پیش فرض ، سرویس فوق از پورت 42424 استفاده می نماید . در صورت ضرورت می توان با استفاده از کلید ریجستری زیر آن را تغییر داد .
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParametersPort |
برای استفاده از روش فوق کافی است که مقدار Inproc به StateServer در فایل web.config تغییر داد . همچنین می بایست از خصلت StateConnectionString به منظور مشخص نمودن IP و شماره پورتی که Session State Service بر روی آن اجراء شده است ، استفاده نمود .
<configuration> |
Sql Session State Store : داده session در یک بانک اطلاعاتی SQL ذخیره می گردد .
<configuration> |
Custom State Store :معماری Sessin state در ASP.NET 2.0 بگونه ای طراحی شده است که امکان افزودن Provider به آن وجود دارد ( مشتق شده از کلاس SessionStateStoreProviderBase ) . در صورتی که بخواهیم Provider اختصاصی خود را ایجاد و یا از یک third-party provider استفاده نمائیم ، می بایست مقدار خصلت mode را Custome در نظر گرفت . در چنین مواردی ، لازم است که custom provider assembly مشتق شده از کلاس SessionStateStoreProviderBase را مشخص نمود .
<configuration> |
مثال : کد زیر یک نمونه از پیکربندی sessionState در فایل web.config را نشان می دهد :
<sessionState |
توضیحات :
mode : نوع ذخیره سازی اطلاعات session را مشخص می نماید . در این رابطه از پنج گزینه Off, InProc, StateServer, SQLServer و Custom استفاده می گردد . که مقدار پیش فرض InProc است .
cookieless : مشخص می نماید که آیا از HTTP cookieless Session Key management حمایت می گردد .
timeout : مدت زمان حیات Session را مشخص می نماید . مقدار timeoute بر اساس زمان درخواست ارزیابی می گردد . مثلا" در صورتی که مقدار timeout بیست دقیقه باشد و در خواستی در ساعت ده و ده دقیقه دریافت گردد ، timeout در ساعت ده و سی دقیقه به اتمام می رسد .
stateConnnectionString :از خصلت فوق به منظور مشخص نمودن آدرس TCP/IP و پورت جهت ارتباط یا Windows Service providing state management استفاده می گردد ( در مواردی که mode=StateServer در نظر گرفته شود ) .
stateNetworkTimeout : مقدار timeout ( بر حسب ثانیه ) را در زمان ذخیره state در یک out-of-process session ( نظیر StateServer ) ، مشخص می نماید .
sqlConnectionString : از خصلت فوق جهت ارتباط با بانک اطلاعاتی SQL Server برای ذخیره و بازیابی داده session استفاده می گردد ( در مواردی که mode=SQLServer در نظر گرفته شود) .
پیکربندی Session State با استفاده از Connection string : کد زیر یک نمونه از پیکربندی Session State با استفاده از connection string را نشان می دهد :
<configuration> |
در بخش سوم به بررسی سایر تنظیمات پیکربندی خواهیم پرداخت .