1. 程式人生 > >.NET CORE 使用存放在資料庫的Session

.NET CORE 使用存放在資料庫的Session

https://blog.csdn.net/u012601647/article/details/68553611

 

session既可以放在記憶體中,也可以儲存在資料庫中,.net core提供了儲存在資料庫中的配置
首先,需要通過cmd指令生成session資料庫,生成資料庫欄位為Id,Value,ExpiresAtTime,

SlidingExpirationInSeconds,AbsoluteExpiration

其次,進行session配置:

(1)startup.cs檔案中,找到ConfigureServices(IServiceCollection services)方法注入Session,
     //sessionDB
    services.AddDistributedSqlServerCache(o =>
      {
       o.ConnectionString = "server=10.1.1.10;database=aaaaa;uid=sa;

[email protected];";
       o.SchemaName = "dbo";
       o.TableName = "SessionState";
       });
    //sessionb timeout
       services.AddSession(o =>
       {
        o.IdleTimeout = TimeSpan.FromSeconds(1800);
       });
(2)找到Configure方法,注入session
    //sessionDB
    app.UseSession();
之後我們就可以在controller中使用session了。
HttpContext.Session.SetString("code","123456");
HttpContext.Session.GetString("code");
注意:注入時會提示某些包需要引入,code可以通過工具將nut包下載到工程中。
Microsoft.AspNetCore.Session。
但是core的session僅限於controller,想在其他地方使用,還需要進行IHttpContextAccessor註解。
首先在startup.cs檔案中ConfigureServices(IServiceCollection services)方法進行HttpContextAccessor註解。
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

其次找到Configure方法,新增IServiceProvider svp引數,在方法中新增【MyHttpContext.ServiceProvider = svp;】

進行注入之後在自定義MyHttpContext類

public static class MyHttpContext
{
  public static IServiceProvider ServiceProvider;
    static MyHttpContext()
    { }
    public static HttpContext Current
    {
      get
       {
         object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
         HttpContext context = ((IHttpContextAccessor)factory).HttpContext;
          return context;
       }
  }
}
注意:新增類如果在FrameWork類庫中,需要引入
Microsoft.AspNetCore.Html.Abstractions.DLL
Microsoft.AspNetCore.Http.DLL 
Microsoft.AspNetCore.Http.Abstractions.DLL

使用時MyHttpContext.Current.Session.SetString("code","123456");
MyHttpContext.Current.Session.GetString("code");

注意:在其他類庫中使用時如果報錯,還需要引入
Microsoft.AspNetCore.Http.DLL
Microsoft.AspNetCore.Http.Abstractions.DLL
Microsoft.AspNetCore.Http.Extensions.DLL
Microsoft.AspNetCore.Http.Features.DLL
Microsoft.AspNetCore.HttpOverrides.DLL

友情提示:seivice類的注入: services.AddTransient<ISiteContract, SiteService>();
--------------------- 
作者:菜鳥小灰灰 
來源:CSDN 
原文:https://blog.csdn.net/u012601647/article/details/68553611?utm_source=copy 
版權宣告:本文為博主原創文章,轉載請附上博文連結!