首页 > 解决方案 > 当我有 .AspNetCore.Session cookie 时,如何在 asp .net core 2.1 中获取会话?

问题描述

我正在尝试在 .net core 2.1 项目中通过 .AspNetCore.Session 获取会话,有没有办法做到这一点?

标签: c#.netasp.net-core

解决方案


在配置服务中

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

推荐阅读