【发布时间】:2018-01-31 05:09:56
【问题描述】:
几天前,我决定将我的网络应用从 asp.net core 1.1 升级到 core 2.0。稍作更改后,一切似乎都正常,除了身份验证不会持续超过 20-30 分钟。
我们可以从 Visual Studio 中获取默认示例,因为我在自己的 webapp 和 "ASP.NET Core Web Application" -> .NET Framework 4.6.1 + ASP.NET Core 2.0 + 中遇到了同样的问题MVC + 个人用户帐户。
配置是默认的,应该是用户登录14天:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
...
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseAuthentication();
...
}
问题是用户只能保持登录状态 20-30 分钟。当用户登录时(选择“记住我”),您可以浏览页面,甚至重新打开浏览器,用户保持登录状态。因此,身份验证 cookie 似乎正在工作。但是,20-30 分钟后用户会自动注销,或者我应该说 cookie 过期(我不知道会发生什么)。您可以再次登录,游戏重新开始。
我尝试设置应用程序cookie过期,但这并不能解决问题:
services.ConfigureApplicationCookie(options => {
options.ExpireTimeSpan = TimeSpan.FromDays(1); // Just shortens cookie expiration time, but still logs out users after 20-30 minutes.
});
由于需要 20-30 分钟,因此看起来像默认会话超时:
services.AddSession(options =>
{
options.Cookie.Expiration = TimeSpan.FromDays(1); // This throws an error "Expiration cannot be set for the cookie defined by SessionOptions"
options.IdleTimeout = TimeSpan.FromDays(1); // This changes session sliding expiration time...
});
同样的实现在 ASP.NET Core 1.1 中运行良好。
【问题讨论】:
标签: c# asp.net session cookies asp.net-core-2.0