.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( * );
});
也可以不指定时间: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对象使用小结的更多相关文章
- Abp.core中在应用层获取HttpContext对象
实际IHttpContextAccessor对象已经在底层实现了自动的依赖注入,只需要在应用层引入Microsoft.AspNetCore.Http,然后在构造函数中依赖注入即可. /// <s ...
- 你注意到 .Net Framework 和 .Net Core 中使用 Session 的区别了吗?
起因 在测试一个例子时发现的问题,这个示例实现的功能是刷新页面也能保持表格锁定列的状态,先看下页面的完成效果: 测试中发现,几乎相同的代码: 在 FineUIMvc(Net Framework)下没有 ...
- 在 ASP.NET CORE 中使用 SESSION (转载)
Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...
- 在 ASP.NET CORE 中使用 SESSION
Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- [转]Asp.net Core中使用Session
本文转自:http://www.cnblogs.com/sword-successful/p/6243841.html 前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. ...
- 解析Asp.net Core中使用Session的方法
2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引 ...
- 在Asp.Net Core中使用Session
1.在Stratup.cs中配置Session public void ConfigureServices(IServiceCollection services) { services.AddSes ...
- .Net Core 中使用Session
1.在 Startup 中 ConfigureServices 添加Session public void ConfigureServices(IServiceCollection services) ...
随机推荐
- Oncomine 数据库
网址 https://www.oncomine.org/resource/login.html Oncomine 是目前世界上最大的癌基因芯片数据库和整合数据挖掘平台,旨在挖掘癌症基因信息.Onco ...
- css选择指定元素
.butSpan:){ margin-left: 10px; } nth-child(n+2)括号内可以是公式 可是是数字
- phpstudy(小皮面板)和phpstudy2018 配置php的区别
phpstudy(小皮面板)和phpstudy2018 配置php的区别 一.总结 一句话总结: phpstudy(小皮面板) 和 phpstudy2018 只是引入的php的位置不同,但是核心代码还 ...
- yum 安装指定版本Docker
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_39553910/artic ...
- Torch-Models 别人训练的FastNeuralStyle
This is the pink style's image: This is the triangle one: The fire ones come from this image: And th ...
- 在 Windows 服务中托管 ASP.NET Core
众所周知,ASP.NET Core采用了和传统ASP.NET不同的托管和HTTP处理方式,即把服务器和托管环境完全解耦.ASP.NET Core内置了两个HTTP服务器实现,一个是基于libuv实现的 ...
- Spark连续特征转化成离散特征
当数据量很大的时候,分类任务通常使用[离散特征+LR]集成[连续特征+xgboost],如果把连续特征加入到LR.决策树中,容易造成overfit. 如果想用上连续型特征,使用集成学习集成多种算法是一 ...
- “庚武讲堂”(v.gw66.net) 缘起
转载自: https://v.gw66.net/origin/ 我叫“庚武”,一个从业10余年的程序员,其实我更愿意自称软件工程师或软件设计师.转眼间倏忽十年,从最开始用ASP.net 2.0做网站入 ...
- 验证ogg同步数据库表无主键表且目标表包含隐藏字段
问题描述: 已知:OGG在同步无主键的表时,OGG会自动设置表的全字段为主键,若目标表字段多于源表,同步过程中replicat进程可以读取insert操作但无法进行update/delete操作,从而 ...
- pycharm安装、首次使用及汉化
摘自:https://blog.csdn.net/qq_30463497/article/details/84992480 一.下载pycharm安装包打开PyCharm的官方下载地址:http:// ...