当我有.AspNetCore.Session Cookie时,如何在ASP .NET Core 2.1中获取会话?

时间:2018-12-29 22:34:36

标签: c# .net asp.net-core

我正在尝试在.net core 2.1项目中通过.AspNetCore.Session进行会话,有什么办法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

无法使用ID创建会话。实际上,它负责创建会话并进行管理。 会话ID只是服务器将其传递给浏览器的唯一ID,以唯一标识HttpSession并保持对话状态。 为什么实际上您需要这样做。如果您认为正确,则无需使用ID创建会话。您的requirememt必须有另一种解决方案。分享您的确切要求,以便我们为您提供帮助。

答案 1 :(得分:0)

在“配置服务”中

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

Reference


编辑:OP询问如何获取会话ID?

可以使用内部控制器

HttpContext.Session.Id

在Controller之外,您需要使用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>();