• .net core中的Session以及HttpContext对象使用小结


    session用于识别用户并保持用户信息,就是一个会话 ,在浏览器不关闭的前提下,可以保存用户的信息,比如登录的保存用户信息从一个网页跳转到另一个网页,你的用户信息就可以用session。

    .net core是一个高度组件化的框架,很多功能比如授权,认证,回话状态等都是通过中间件的方式引入的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。

    1、添加Session

    在你的项目上基于NuGet添加:Microsoft.AspNetCore.Session。一般我们在建立core web项目时,程序已经添加了对session的支持。

    2、添加Session配置服务

    在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):

    配置session超时时间60分钟。

    services.AddSession(o =>
                {
                    o.IdleTimeout = TimeSpan.FromSeconds(60 * 60);
                });

    也可以不指定时间:services.AddSession();

    3、启用Session配置

    session注入到了服务,我们还要告诉Asp.net Core使用内存存储Session数据    app.UseSession();

    注意放置代码的顺序,Session必须在MVC之前。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Error");
                    app.UseHsts();
                }
                //用户session服务
                app.UseSession();
    
                app.UseHttpsRedirection();
                app.UseStaticFiles();
                //app.UseCookiePolicy();
    
                //创建路由
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "Default",
                        template: "{controller}/{action}/{id?}",
                        defaults: new { controller = "Home", action = "Index" }
                    );
                });
                app.UseMvc();
            }

    在MVC Controller里使用HttpContext.Session

    public class HomeController:Controller
    {
       public IActionResult Index()
       {
           HttpContext.Session.SetString("code","123456");
           return View();
        }
     
        public IActionResult About()
        {
           ViewBag.Code=HttpContext.Session.GetString("code");
           return View();
        }
    }

    2、如果不是在Controller里,你可以注入IHttpContextAccessor,有两种方式,一种是在类的构造函数里面注入,如下:

    public class SomeOtherClass
    {
       private readonly IHttpContextAccessor _httpContextAccessor;
       private ISession _session=> _httpContextAccessor.HttpContext.Session;
     
       public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
       {
          _httpContextAccessor=httpContextAccessor;      
       }
     
       public void Set()
       {
         _session.SetString("code","123456");
       }
       
       public void Get()
      {
         string code = _session.GetString("code");
       }
    }

    3、另外一种是通过IServiceProvider,这时需要在startup中Configure中得到这个对象,然后通过

    Microsoft.AspNetCore.Http.IHttpContextAccessor factory = app.ApplicationServices.GetService<Microsoft.AspNetCore.Http.IHttpContextAccessor>();
    Microsoft.AspNetCore.Http.HttpContext context = factory.HttpContext;

    或者

    Microsoft.AspNetCore.Http.IHttpContextAccessor factory = app.ApplicationServices.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
    Microsoft.AspNetCore.Http.HttpContext context = factory.HttpContext;

    得到Microsoft.AspNetCore.Http.HttpContext对象,这时就可以和使用HttpContext了,里面有Session,Request,Response对象的使用,在使用Request对象时,这样获取HttpContext.Request.Query[""]请求参数,获取cookie通过HttpContext.Request.Cookies[""],这里有一点需要注意netcore中的cookie添加的是通过HttpContext.Response.Cookies.Append方法添加的,和asp.net 不同的是添加的键值对的值是自动UrlEncode的,所以获取cookie的时候是UrlDecode的,这个需要注意。


    原文:https://www.jianshu.com/p/0315aa029867

  • 相关阅读:
    Windows XP上可以安装的SQL Server 2008版本
  • 原文地址:https://www.cnblogs.com/likui-bookHouse/p/11242953.html
Copyright © 2020-2023  润新知