3

我正在使用会话来管理 ASP.NET CORE 中的应用程序状态,它的配置如下。

 services.AddSession(options =>
            {
                options.CookieName = ".my.Session";
                options.IdleTimeout = TimeSpan.FromSeconds(20);
            });

它在本地主机上工作,但在远程 IIS 8 上它没有创建 cookie,因此无法获取值。我也启用了 CORS,但不知道究竟是什么导致了这个问题。在日志中也没有显示错误。在响应标头设置 cookie 存在但未在浏览器中设置

4

2 回答 2

3

我前段时间遇到过这个问题。它可能与新的 Cookie 政策有关。

尝试设置options.CheckConsentNeeded = context => false;。所以在 Startup.cs 的“ConfigureServices”里面它需要是这样的:

public void ConfigureServices(IServiceCollection services)
        {
            var connection = Configuration["ConnectionStrings:DefaultConnection"];
            services.AddDbContext<ProjectDbContext>(options => options.UseMySql(connection, b => b.MigrationsAssembly("PrimaryProject")));

            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.

                //Here comes the change:
                options.CheckConsentNeeded = context => false;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });



            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseMySql(connection));
            services.AddDefaultIdentity<IdentityUser>()
                .AddEntityFrameworkStores<ApplicationDbContext>();



            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
                .AddSessionStateTempDataProvider();

            services.AddSession();
        }

问候,

H·埃伯哈特

于 2018-08-25T16:14:14.883 回答
2
services.AddSession(options => 
{ 
    options.IdleTimeout = TimeSpan.FromMinutes(20); 
    options.CookieHttpOnly = true; 
});

也许它正在工作,立即尝试

于 2017-05-16T04:45:52.403 回答