c# - 当我有 .AspNetCore.Session cookie 时,如何在 asp .net core 2.1 中获取会话?
问题描述
我正在尝试在 .net core 2.1 项目中通过 .AspNetCore.Session 获取会话,有没有办法做到这一点?
解决方案
在配置服务中
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
});
在 UseMvc() 之前的配置中
app.UseSession();
然后在控制器中,
HttpContext.Session.SetString(SessionKeyName, "The Doctor");
HttpContext.Session.SetInt32(SessionKeyAge, 773);
var name = HttpContext.Session.GetString(SessionKeyName);
var age = HttpContext.Session.GetInt32(SessionKeyAge);
编辑:OP 询问如何获取会话 ID?
您可以在控制器内部使用
HttpContext.Session.Id
在控制器之外,您需要使用 IHttpContextAccessor
public class MyClass
{
private readonly HttpContext context;
public RequestInformation(IHttpContextAccessor contextAccessor)
{
this.context = contextAccessor.HttpContext;
}
public string GetSettionId()
{
return HttpContext.Session.Id;
}
}
PS:别忘了添加 IHttpContextAccessor 注册
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
推荐阅读
- vue.js - Vue.js 通过操作存储更改状态
- html - 只应用了一个媒体查询。只有最后一个媒体查询最终被应用
- r - 当需要 data.table 中的 `measure = patterns("x", "y")` 时,使用 tidyverse (dplyr) 函数融化
- mysql - 如何在关系表中显示学术头衔/学位
- angular - 从 firebase 集合中获取文档对象
- python - 使用 Python 进行复杂词搜索多个文件
- conv-neural-network - 我可以同时使用扩张卷积和最大池化层吗?
- angular - 角材料
刷新页面时隐藏 - node.js - 无法等待 fs.appendFile
- javascript - node.js 将 json 附加到未使用数组的 JSON 文件中