Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session asp.net核心中从未设置会话Cookie_Session_Asp.net Core_Session Cookies_Asp.net Core 2.0 - Fatal编程技术网

Session asp.net核心中从未设置会话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

我正在尝试为asp.net core 2.0网站配置会话,但从未设置会话cookie

我打电话给

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