2016-04-22 84 views
0

我正在使用ASP.NET MVC 6并尝试存储会话Cookie,但是当我打开浏览器时,它只是表示Expires:Session。ASP.NET CookieAuthentication不会存储比浏览器会话更长的Cookie

Startup.cs:

 app.UseCookieAuthentication(options => 
     { 
      options.AutomaticAuthenticate = true; 
      options.AutomaticChallenge = false; 
      options.SlidingExpiration = true; 
      options.ExpireTimeSpan = TimeSpan.FromDays(30); 
     }); 

这应该设置cookie将持续30天,但不起作用。

第二个问题,会话信息存储在哪里?我正在使用Microsoft Azure托管这些内容,并且还使用SQL存储,但没有专门为处理会话存储设置任何内容。

回答

0

您的应用程序是否跨越多个实例或自动缩放?如果有,你可能需要设置DataProtection service,因为一个请求可以被认证,但下一个(可能登陆另一个实例)不会。

现在我们Startup.cs文件有以下几点:

public void ConfigureServices(IServiceCollection services) 
{ 
    //... 
    services.AddDataProtection(); 
    services.ConfigureDataProtection(configure => 
    { 
     configure.SetApplicationName("YourAppName"); 
    }); 
    //... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     //... 

     app.UseCookieAuthentication(options => 
     { 
      options.LoginPath = new PathString("/"); 
      options.AutomaticAuthenticate = true; 
      options.AutomaticChallenge = true; 
      options.ExpireTimeSpan = new TimeSpan(1, 0, 0); 
      options.SlidingExpiration = true; 

     }); 

     //... 
    } 

这可以确保得到的cookie在您的Web应用程序的所有实例共享。

+0

这对于Azure中的Web角色(而不是WebApp)是否也适用? – Jennet

+0

对于Web角色,我会尝试在其他地方讲述关键字,比如Azure存储,请检查以下公告:https://blogs.msdn.microsoft.com/webdev/2016/11/16/announcing-asp-net-core- 1-1 / –

相关问题