کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

ASP.NET Core 2.0 Session State

ASP.NET Core 2.0 Session State

Problem

نحوه ذخیر اطلاعات در حالت session با استفاده از ASP.NET Core.

Solution

یک پروژه خالی ایجاد کنید و کلاس Startup متد ConfigureServicee تغییر دهید، یک services برای session و backing store ایجاد کنید:

public void ConfigureServices(  
      IServiceCollection services)  
  {  
      services.AddDistributedMemoryCache();  
      services.AddSession();  
  }  

session middleware را در متد Configure اضافه کنید:

public void Configure(  
          IApplicationBuilder app,  
          IHostingEnvironment env)  
      {  
          app.UseSession();  
  
          app.Use(async (context, next) =>  
          {  
              context.Session.SetString("GreetingMessage", "Hello Session State");  
              await next();  
          });  
  
          app.Run(async (context) =>  
          {  
              var message = context.Session.GetString("GreetingMessage");  
              await context.Response.WriteAsync($"{message}");  
          });  
      }  

Discussion

ما می توانیم از session برای به اشتراک گذاشتن اطلاعات بین درخواست های HTTP مختلف از یک مرورگر استفاده کنیم. داده ها در یک حافظه پنهان (اجرا شده توسط IDistributedCache خاص) ذخیره می شوند و از طریق ویژگی HttpContext.Session قابل دسترسی هستند.

یک کوکی در مرورگر ذخیره می شود تا درخواست های HTTP را هماهنگ کند. نام پیش فرض این کوکی (.AspNet.Session)است.

در طول تنظیم خدمات session ما می توانیم propertiesمختلف مانند:

  • HttpOnly - تعیین می کند که آیا کوکی از طریق جاوا اسکریپت قابل دسترسی است یا خیر پیش فرض true است، به این معنی که از طریق اسکریپت ها در سمت client-side قابل دسترسی نیست.
  • Name- برای لغو پیش فرض نام کوکی استفاده می شود.
  • SecurePolicy - تعیین می کند که آیا کوکی session فقط از طریق درخواست های HTTPS منتقل می شود.
  • IdleTimeout – زمان انقضا را برای هر session تنظیم می کند، هر request زمان وقوع را بازنشانی می کند.پیش فرض 20 دقیقه می باشد.
public void ConfigureServices(  
       IServiceCollection services)  
    {  
        services.AddDistributedMemoryCache();  
        services.AddSession(options =>  
        {  
            options.Cookie.HttpOnly = true;  
            options.Cookie.Name = ".Fiver.Session";  
            options.Cookie.SecurePolicy = CookieSecurePolicy.Always;  
            options.IdleTimeout = TimeSpan.FromMinutes(10);  
        });  
    }  

Storing Objects

HttpContext.Session (یا ISession که آن را پیاده سازی می کند) یک روش داخلی برای ذخیره اشیاء پیچیده ارائه نمی دهد، با این وجود، ما می توانیم اشیا را به رشته های JSON سریالیزه کنیم تا برای رسیدن به این،

    public static class SessionExtensions  
  {  
      public static void SetObject< T >(this ISession session, string key, T value)  
      {  
          session.SetString(key, JsonConvert.SerializeObject(value));  
      }  
  
      public static T GetObject< T >(this ISession session, string key)  
      {  
          var value = session.GetString(key);  
          return value == null ? default(T) :  
                                JsonConvert.DeserializeObject< T >(value);  
      }  
  }  

اکنون می توانیم از این extension methods زیر استفاده کنیم:

public void Configure(  
     IApplicationBuilder app,  
     IHostingEnvironment env,  
     ILoggerFactory loggerFactory)  
 {  
     app.UseSession();  
  
     app.Use(async (context, next) =>  
     {  
         context.Session.SetObject("CurrentUser",  
             new UserInfo { Username = "James", Email = "james@bond.com"  });  
         await next();  
     });  
  
     app.Run(async (context) =>  
     {  
         var user = context.Session.GetObject< UserInfo >("CurrentUser");  
         await context.Response.WriteAsync($"{user.Username}, {user.Email}");  
     });  
 }

Accessing via Dependency Injection

برای دسترسی به session با استفاده از dependency injection، می توانید از IHttpContextAccessor (از طریق constructor) استفاده کنید که به HttpContext دسترسی پیدا می کند.

1396/08/11 3481 1445
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...