Web 表单登录超时

Posted

技术标签:

【中文标题】Web 表单登录超时【英文标题】:Web Forms Login Timeout 【发布时间】:2019-08-03 00:11:51 【问题描述】:

我已经使用个人用户帐户创建了一个开箱即用的 Web Forms 4.5.2 项目。我无法让登录超时工作。我更新了 Web.config 以将超时设置为 12 分钟:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login.aspx" timeout="12" slidingExpiration="true" 
        requireSSL="true" />
</authentication>

我明确地将会话超时设置为 20 分钟,尽管我认为这是默认设置:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="20">

我的understanding 将slidingExpiration 设置为true,如果经过的时间是greater than half 会话时间,则超时会在浏览器刷新时重置。除了slidingExpiration,超时不起作用,因为我在 12 分钟后刷新浏览器时仍处于登录状态。

当这不起作用时,我查看了 Startup.Auth.cs 文件并将其中的时间间隔也更改为 12 分钟。我推测这与 cookie 的到期有关:

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

我正在使用本地安装的 SQL Server 2014 实例:

<add name="DefaultConnection" 
    connectionString="Server=XXX;Database=abc;user ID=myself;password=myself123" 
        providerName="System.Data.SqlClient" />

在 IIS 中,会话状态设置为“进行中”,cookie 设置如下:

还是不行。我错过了什么?

更新

我在本地开发机器上添加了一个自签名证书,但仍然无法超时工作;不断登录。我是否必须编写特定代码才能获得此功能?到目前为止,我只使用过旧的会员系统,对 Owin/Katana/Identity/EF 不是很熟悉。

【问题讨论】:

【参考方案1】:

我终于想通了,虽然我真的需要加强 OWIN/Katana。

首先,我从 Web.config 中注释掉以下内容,因为它只在旧的会员系统中使用:

<!--<forms loginUrl="~/Account/Login.aspx" timeout="1" slidingExpiration="true" requireSSL="true" />-->

接下来,我按照this article在Startup.cs代码中配置了认证超时:

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

重要提示:为了完成这项工作,我不得不手动删除浏览器开发工具中的旧 cookie。

更新

为澄清起见,身份成员系统仍使用 Web.config 文件中的表单条目。您可以在那里设置全局超时,但如果您想要更精细的控制,请使用上面的代码 sn-p。

【讨论】:

以上是关于Web 表单登录超时的主要内容,如果未能解决你的问题,请参考以下文章

Web窗体登录超时

表单身份验证超时与 sessionState 超时

表单身份验证超时与sessionState超时

ESXi 6.5 总是会话超时

处理网络应用程序中会话超时的最佳方法?

c# 的web Service的超时时间设置问题