چگونه با session state در ASP.Net کار کنیم

session state یکی از قابلیت های فوق العاده ASP.Net است، در این مطلب درباره کار با session state صحبت خواهیم کرد و اطلاعاتی را در اختیار شما قرار می دهیم.

 چگونه با session state در ASP.Net کار کنیم

ASP.NET یک فریم ورک متن باز، کراس پلتفرم، سبک، قابل توسعه و ماژولار برای ساخت اپلیکیشن های تحت وب با عملکرد بالا است. این فریم ورک شما را قادر می سازد تا داده های کاربر را ذخیره کنید و کار خود را با این داده ها و درخواست هایی که از سمت همین کاربر به شما ارسال می شود ادامه دهید. شما می توانید از مزایای middleware های لازم که به صورت بخشی از پکیج Microsoft.AspNetCore.Session در دسترس هستند استفاده کنید تا با حالت نشست در ASP.NET کار کنید.


کامپوننت Middleware

این کامپوننت در ASP.NET برای سفارشی سازی مدیریت درخواست ها و پاسخ های آن ها و همینطور inspect، rout یا اصلاح درخواست ها و پیغام های آن ها که در pipeline جریان دارند استفاده می شود. معمولا زنجیره ای از این کامپوننت ها را در داخل پیپ لاین اپلیکیشن در ASP.NET در اختیار دارید. در  این مقاله قصد داریم درباره این که چگونه ما می توانیم با session state در ASP.NET استفاده کنیم بحث کنیم.

 session state


ساخت یک پروژه ASP.NET

در ابتدا اجازه دهید که یک پروژه را در ویژوال استودیو بسازیم، فرض ما در این جا این است که شما نسخه 2017 و یا 2019 از این Ide را بر روی سیستم خود نصب کرده اید. مراحلی که برای ساخت یک پروژه ASP.NET باید بپیمایید به شکل زیر است:

-          IDE ویژوال استودیو را اجرا کنید.

-          بر روی “Create new project” کلیک کنید.

-          در پنجره باز شده از لیستی که در اختیار شما قرار دارد گزینه “ASP.Net Core Web Application” را انتخاب کنید.

-          بر روی next کلیک کنید.

-          در پنجره “Configure your new project” که در بخش بعدی برای شما ظاهر می شود نام و محل قرارگیری پروژه ی خود را انتخاب کنید.

-          بر روی Create کلیک کنید.

-          در بخش “Create New ASP.Net Core Web Application” که در مرحله بعدی برای شما ظاهر می شود .Net Core را به عنوان ران تایم انتخاب کرده و گزینه ASP.Net Core 2.2 یا نسخه های بالاتر را از لیستی که در قسمت بالا وجود دارد انتخاب کنید.

-          گزینه “Web Application (Model-View-Controller)” را به عنوان قالب پروژه ی خود برای ساخت یک پروژه جدید در ASP.NET انتخاب کنید.

-          اطمینان حاصل کنید که چک باکس های “Enable Docker Support” و “Configure for HTTPS” تیک نخورده باشند چرا که ما در اینجا قصد نداریم از این ویژگی ها استفاده کنیم.

-          گزینه Authentication را نیز بر روی “No Authentication” قرار دهید چرا که ما از Authentication نیز استفاده نخواهیم کرد.

-          حال می توانید بر روی گزینه Create کلیک کنید.

حال شما باید یک پروژه ASP.NET Core داشته باشید که آماده است تا بر روی ویژوال استودیو اجرا شود. در بخش های بعدی این مقاله از این پروژه استفاده خواهیم کرد تا بیشتر با session state در ASP.Net آشنا شویم.

 session state


session state middleware را در ASP.Net نصب کنید!

گام بعدی این است که پکیج مورد نیاز NuGet را نصب کنیم تا بتوانیم از session state در ASP.Net استفاده کنیم. پکیج NuGet که ما در این جا برای استفاده از session state نیاز داریم پکیج Microsoft.AspNetCore.Session NuGet package است که باید آن را به پروژه ی خود اضافه کنید. در پنجره Solution Explorer بر روی پروژه خود راست کلیک کرده و بر روی گزینه “Manage NuGet Packages...” کلیک کنید، حال در بخش NuGet Package Manager این پکیج را جست و جو کرده و آن را نصب کنید.

روش دیگر برای انجام این کار این است که می توانید این پکیج را از کنسول مدیریت کننده پکیج های NuGet نصب کنید که این کار با استفاده از دستور زیر انجام می شود:

PM> Install-Package Microsoft.AspNetCore.Session

 session state


تنظیمات مربوط به session state (بخش اول)

اکنون که شما پکیج NuGet را نصب کردید می توانید کامپوننت middleware نشست را به پیپ لاین مربوط به ASP.Net اضافه کنید. توجه داشته باشید که برای فعال کردن session state در ASP.Net شما باید هر کدام از کش های حافظه IDistributedCache که قصد استفاده از آن را دارید را به عنوان حافظه پشتی به نشست اضافه کنید.

علاوه بر این شما باید یک فراخوانی از AddSession را در متد ConfigureServices خود بسازید تا با استفاده از آن بتوانید session middleware را به پیپ لاین ASP.Net خود اضافه کنید. در آخر شما باید متد UseSession را در داخل متد Configure که در داخل کلاس Startup قرار دارد فراخوانی کنید.

 session state


تنظیمات مربوط به حالت نشست (بخش دوم)

قطعه کد زیر به شما نشان می دهد که چگونه می توانید session state middleware را به پیپ لاین ASP.Net در داخل متد ConfigureServices اضافه کنید.

public void ConfigureServices(IServiceCollection services)

    {

        services.AddDistributedMemoryCache();

        services.AddSession(options =>

        {

            options.IdleTimeout = TimeSpan.FromSeconds(5);

            options.Cookie.HttpOnly = true;

            options.Cookie.IsEssential = true;

        });

        services.AddMvc()

            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    }

زمانی که کامپوننت session state middleware به پیپ لاین پروژه شما اضافه شد شما باید متد UseSession را در داخل متد Configure در کلاس Startup فراخوانی کنید.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    {

        app.UseHttpsRedirection();

        app.UseStaticFiles();

        app.UseSession();

        app.UseHttpContextItemsMiddleware();

        app.UseMvc();

    }

 session state


ذخیره کردن داده ها به session state ASP.Net و بازیابی داده ها از آن

شما می توانید از مزایای متدهای Set، SetInt32 و SetString برای تنظیم مقادیر session state استفاده کنید. این متدها در واقع یک کلید را به همراه داده ی آن به عنوان آرگومان دریافت می کنند. علاوه بر این متد Set می تواند آرایه ای از بایت ها را نیز به عنوان آرگومان دریافت کند.

به صورت مشابه شما متدهای Get، GetInt32 و GetString را نیز در اختیار دارید که می توانید از آن ها برای بازیابی داده ها از یک session state با استفاده از یک کلید استفاده کنید، متد Get یک کلید را به عنوان یک آرگومان دریافت می کند و آرایه ای از بایت ها را به شما باز می گرداند. برای استفاده از این متدها شما باید یک رفرنس را به Microsoft.AspNetCore.Http در کد خود اضافه کنید.

قطعه کد زیر نشان می دهد که چگونه می توانید داده ها را به session state در متد کنترل کننده action خود اضافه کنید.

public IActionResult Index()

{

   HttpContext.Session.SetString("Message", "Hello World!");

   HttpContext.Session.SetInt32("Year", 2019);

   return View();

}

قطعه کد دیگری که می توانید از آن برای بازیابی داده ها از session state خود استفاده کنید نیز در ادامه برای شما آورده ایم:

public IActionResult About()

{

    ViewBag.Message = HttpContext.Session.GetString("Message");

    ViewBag.Year = HttpContext.Session.GetInt32("Year");

    return View();

}

اگر مایل هستید که داده هایی از نوع دیگر را ست کرده و یا دریافت کنید شما باید متدهای مخصوص این داده ها را ایجاد کنید که این کار را باید در بخش ISession انجام دهید و در مواقعی که به آنها نیاز دارید به راحتی می توانید آنها را پیاده سازی کنید.