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( * );
});

也可以不指定时间: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","");
       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","");
} 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

.net core中的Session以及HttpContext对象使用小结的更多相关文章

  1. Abp.core中在应用层获取HttpContext对象

    实际IHttpContextAccessor对象已经在底层实现了自动的依赖注入,只需要在应用层引入Microsoft.AspNetCore.Http,然后在构造函数中依赖注入即可. /// <s ...

  2. 你注意到 .Net Framework 和 .Net Core 中使用 Session 的区别了吗?

    起因 在测试一个例子时发现的问题,这个示例实现的功能是刷新页面也能保持表格锁定列的状态,先看下页面的完成效果: 测试中发现,几乎相同的代码: 在 FineUIMvc(Net Framework)下没有 ...

  3. 在 ASP.NET CORE 中使用 SESSION (转载)

    Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...

  4. 在 ASP.NET CORE 中使用 SESSION

    Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...

  5. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

  6. [转]Asp.net Core中使用Session

    本文转自:http://www.cnblogs.com/sword-successful/p/6243841.html 前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. ...

  7. 解析Asp.net Core中使用Session的方法

    2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引 ...

  8. 在Asp.Net Core中使用Session

    1.在Stratup.cs中配置Session public void ConfigureServices(IServiceCollection services) { services.AddSes ...

  9. .Net Core 中使用Session

    1.在 Startup 中 ConfigureServices 添加Session public void ConfigureServices(IServiceCollection services) ...

随机推荐

  1. Golang 位向量

    位图 位图(Bitmap)是通过一个 bit 来表示某个元素对应的值或者状态.它并不是什么新的数据结构.它的内容其实就是普通的字符串. 在redis中,我们可以通过 get/set 获取位图的内容,也 ...

  2. 线程休眠只会用Thread.sleep?那你就弱爆了!

    线程休眠是 Java 开发经常会用到的一个手段,就是让当前线程睡一会儿,睡醒之后再继续运行. 咱大多数程序员,多线程虽然学得不好,但线程休眠,无人不知,无人不晓,也都会用,不就是用 Thread.sl ...

  3. mybatis在sql中的CDATA区

    示例 <if test="startTime != null"> <![CDATA[ AND rra.create_time >= #{startTime} ...

  4. Django实现自动发布(2视图-服务版本查找和新增)

    前面做好了服务的管理,接下来是服务版本的管理,和服务类似,版本也有增删改查.先在服务的管理页面做一个入口,如下图: 需要在上一步的服务管理页面增加按钮.按钮方法,点击按钮跳转时要打开一个新的页面,所以 ...

  5. uniapp - 文字收缩展示插件

    插件地址:https://ext.dcloud.net.cn/plugin?id=657

  6. 树莓派3B+红外配置

    sudo apt-get install lirc /etc/lirc/lirc_options.conf #driver = devinput driver = default #device = ...

  7. fluid.io.load_inference_model 载入多个模型的时候会报错 -- [paddlepaddle]

    将多个模型部署到同一个服务时,会出现stack错误. 原因是program为全局. 改成这样,可以解决. solved by myself. for those who need it:use a n ...

  8. http 请求方式解析

    表单中<form></form>, 如果使用method="get"方式提交,则不会指定请求体编码方式.默认请求参数使用?拼接到url之后.如:http:/ ...

  9. C++ Multimap运用实例—查找元素

    C++ Multimap运用实例—查找元素 #include <map> #include <iostream> #include <algorithm> #inc ...

  10. Python 使用 paho-mqtt

    https://blog.csdn.net/weixin_41656968/article/details/80848542 https://blog.csdn.net/lhh08hasee/arti ...