【问题标题】:Session timeout does not work ( is set in web.config )会话超时不起作用(在 web.config 中设置)
【发布时间】:2016-06-22 03:13:54
【问题描述】:

我使用 ClaimsIdentity 框架在我的一个应用程序中设置身份验证。

我将这些行添加到 web.config 文件中,如this question 中所述。

<sessionState
         mode="InProc"
         timeout="1" />

我让应用程序在一夜之间运行,但我仍然处于登录状态。 我想将会话超时设置为 30 分钟,有什么建议吗?

ASP.NET MVC 版本:5.2.3.0

【问题讨论】:

  • 登录与会话完全不同。
  • @ErikPhilips 你能解释一下吗?
  • 你用什么来授权的?表格、成员资格或身份?
  • @ErikPhilips 身份;

标签: asp.net-mvc web-config


【解决方案1】:

根据 ASP.Net-Identity-Cookie-Authentication-Timeouts,您应该使用 Identity 的 UseCookieAuthentication() 参数来设置超时。

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
  AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
  LoginPath = new PathString("/Account/Login"),
  Provider = new CookieAuthenticationProvider
  {
    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(15),
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
  },
  SlidingExpiration = false,
  ExpireTimeSpan = TimeSpan.FromMinutes(30)
});

CookieAuthenticationOptions.ExpireTimespan 是允许您设置发出的 cookie 有效期的选项。在上面的示例中,cookie 自创建之日起 30 分钟内有效。一旦这 30 分钟结束,用户将不得不重新登录,因为 SlidingExpiration 设置为 false。

如果 SlidingExpiration 设置为 true,那么 cookie 将在 ExpireTimeSpan 中途的任何请求上重新发出。例如,如果用户登录并在 16 分钟后发出第二个请求,则 cookie 将在 30 分钟后重新发出。如果用户登录并在 31 分钟后发出第二个请求,则会提示用户登录。

【讨论】:

  • 是否可以将这些设置从 Startup.Auth.cs 代码移动到 web.config 文件(或至少单独的 ExpireTimeSpan)?
  • @AlexanderMihailov 什么会阻止您在此代码之前将 web.config 设置读入变量并使用这些变量动态提供此代码的值?
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2022-01-17
  • 1970-01-01
  • 2011-10-30
  • 2016-01-21
相关资源
最近更新 更多