我正在尝试为asp.net core 2.0网站配置会话,但是永远不会设置会话cookie。
我打电话..
app.UseSession();
...在Startup.Configure和...
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
options.Cookie.HttpOnly = false;
options.Cookie.Name = "WS_AUTH_ID";
});
...在ConfigureServices方法中。
在控制器中,我可以进行...
HttpContext.Session.Id;
...但每个请求的ID总是不同的。
我错过了什么吗?
更新:我应该提醒我可以设置cookies"手动"并且浏览器将接收"它们。
HttpContext.Response.Cookies.Append("Test_cookie", "yo");
答案 0 :(得分:11)
这是我的原因:
扩展名Microsoft.AspNetCore.CookiePolicy
(UseCookiePolicy
)阻止了会话cookie。删除此扩展程序并在新的浏览器窗口中运行该应用程序即可解决此问题。
Rationale:此扩展程序阻止发送到浏览器的cookie,直到用户接受为止。由于会话信息存储在cookie中,因此该扩展程序阻止了cookie ...没有cookie,没有会话。
另一种解决方法是使应用程序无需会话即可工作,直到用户接受Cookie(我没有测试此解决方法)为止。
希望有帮助。
答案 1 :(得分:3)
如果您启用了Cookie政策,则在用户接受Cookie之前不会创建会话cookie,这是为了符合欧盟的GDPR。
您可以删除该行
app.UseCookiePolicy();
Startup
进行操作,然后它将起作用,否则您的用户将需要同意使用cookie,然后才能将cookie用于会话控制。
答案 2 :(得分:0)
您必须在ConfigureServices方法中键入以下内容:
services.AddMvc()
.AddSessionStateTempDataProvider();
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.Name = ".MyApplication";
});
在您的配置中输入以下内容
//enable session before MVC
app.UseSession();
app.UseMvc();
答案 3 :(得分:0)
对我来说,此问题已通过以下问题的评论之一解决了:
除非您向会话中添加内容,否则不会编写cookie。
因此,仅请求Session.Id
并没有帮助,您实际上必须设置一些内容。
在我的情况下,这是一个仅在某个条件之后设置的变量,并且在满足该条件之前,它将一遍又一遍地创建新的会话ID。