Session asp.net核心中从未设置会话Cookie
我正在尝试为asp.net core 2.0网站配置会话,但从未设置会话cookie 我打电话给Session asp.net核心中从未设置会话Cookie,session,asp.net-core,session-cookies,asp.net-core-2.0,Session,Asp.net Core,Session Cookies,Asp.net Core 2.0,我正在尝试为asp.net core 2.0网站配置会话,但从未设置会话cookie 我打电话给 app.UseSession(); …在启动中。配置并 services.AddDistributedMemoryCache(); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(10); o
app.UseSession();
…在启动中。配置并
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,浏览器将“接收”它们
您必须在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();
这就是我的原因: 扩展名Microsoft.AspNetCore.CookiePolicy(
UseCookiePolicy
)正在阻止会话cookie。删除此扩展并在新浏览器窗口中运行应用程序修复了此问题
理由:此扩展阻止发送到浏览器的cookie,直到用户接受它们。由于会话密钥存储在cookie中,并且cookie被此扩展阻止。。。没有cookies,就没有会话
另一种解决方法是,在用户接受cookie之前,允许应用程序在没有会话的情况下工作(我没有测试这种解决方法)
希望能有所帮助。如果您打开了cookie策略,则在用户接受cookie的使用之前,不会创建cookie会话,这是为了遵守欧盟的GDPR 您可以删除该行
app.UseCookiePolicy()代码>
从您启动
,然后它就会工作,否则您的用户需要同意使用cookie,然后才能将cookie用于会话控制。对我来说,问题通过对问题的一条评论得到解决:
除非向会话中添加了内容,否则不会编写cookie
因此,仅仅请求Session.Id
是没有帮助的,实际上您必须设置一些东西
在我的例子中,它是一个仅在某个条件之后设置的变量,在满足该条件之前,它会一次又一次地创建一个新会话ID。您实际上是在写入会话,还是只是在查看ID?除非您向会话中添加了内容,否则不会编写cookie。@如果您是对的。我知道这很简单。我只希望其中一个教程能提到这一点。这是一个存储系统。你还怎么用它?说得对。但是我只需要它来识别访问者/用户,所以会话cookie才是我真正需要的。不过,这只会对会话的生命周期有好处。然后,用户将看起来像一个新的,这可能会被证明是有问题的,根据你实际做的。实际上,放弃会话而直接编写cookie可能更好。然后,您可以让它在将来过期,并在几天或几周的多次访问中识别用户,只要他们不手动删除cookie。这基本上就是谷歌在分析、广告词等方面所做的。通过在服务内部设置“options.Cookie.IsEssential=true”来覆盖这个问题
//enable session before MVC
app.UseSession();
app.UseMvc();