Session Cookie永远不会在asp.net核心中设置

Pre*_*eli 9 session session-cookies asp.net-core asp.net-core-2.0

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

我打电话 ..

app.UseSession();
Run Code Online (Sandbox Code Playgroud)

...在Startup.Configure和...

        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(10);
            options.Cookie.HttpOnly = false;
            options.Cookie.Name = "WS_AUTH_ID";
        });
Run Code Online (Sandbox Code Playgroud)

...在ConfigureServices方法中.

在控制器中,我可以进行...

HttpContext.Session.Id;
Run Code Online (Sandbox Code Playgroud)

...但每个请求的ID总是不同的.

我错过了什么吗?

更新:我应该提醒我可以"手动"设置cookie,浏览器将"接收"它们.

HttpContext.Response.Cookies.Append("Test_cookie", "yo");
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 12

这是我的原因:

会话cookie的创建被extension Microsoft.AspNetCore.CookiePolicy(UseCookiePolicy)阻止.删除此扩展并在新的浏览器窗口中运行应用程序可解决此问题.

另一种解决方法可能是使应用程序在没有会话的情况下工作,直到用户接受cookie(我没有测试此解决方法).

希望有所帮助.


Rui*_*ima 5

如果您启用了 cookie 策略,则在用户接受使用 cookie 之前不会创建会话 cookie,这是为了遵守欧盟的 GDPR。

您可以app.UseCookiePolicy(); 从您那里删除该行 Startup,然后它就会起作用,否则您的用户将需要同意使用 cookie,然后您才能使用 cookie 进行会话控制。


pit*_*dis 1

您必须在ConfigureServices 方法中输入以下内容:

services.AddMvc()
    .AddSessionStateTempDataProvider();

services.AddDistributedMemoryCache();
services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(30);
    options.Cookie.Name = ".MyApplication";
}); 
Run Code Online (Sandbox Code Playgroud)

在您的配置中输入以下内容

//enable session before MVC
app.UseSession();
app.UseMvc();
Run Code Online (Sandbox Code Playgroud)