我正在尝试在.net core 2.1项目中通过.AspNetCore.Session进行会话,有什么办法可以做到这一点?
答案 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);
编辑: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>();