ASP.Net Forms身份验证在10分钟后注销用户

时间:2009-01-12 15:15:54

标签: .net asp.net cookies web-config forms-authentication

我遇到了一个非常糟糕的问题,无论我尝试什么,用户都会在10分钟后退出。

我正在运行在运行为虚拟服务器的Server 2003 R2 Standard Edition上的IIS 6.0上运行的ASP.Net 2.0以及所有适用的更新和.Net 3.5 SP1。

客户端是Internet Explorer 7.0

以下是web.config设置:

<!-- Authentication Mode -->
<authentication mode="Forms">
  <forms name=".RecipeViewer" timeout="240" />
</authentication>

以下是用于设置授权cookie的代码:

Private Sub SetCookie(userName)
                ' Use security system to set the UserID within a client-side Cookie
                Dim ticket As New FormsAuthenticationTicket(1,userName, DateTime.Now, DateTime.Now.Add(Me.GetFormsAuthSettings.Forms.Timeout), True, String.Empty, FormsAuthentication.FormsCookiePath)
                Dim hash As String = FormsAuthentication.Encrypt(ticket)
                Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, hash)

                cookie.HttpOnly = True

                If (ticket.IsPersistent) Then
                    cookie.Expires = ticket.Expiration
                End If

                Response.Cookies.Add(cookie)

                ' Redirect browser back to originating page
                Response.Redirect(Request.ApplicationPath)
End Sub

    Private Function GetFormsAuthSettings() As System.Web.Configuration.AuthenticationSection
        Return DirectCast(System.Configuration.ConfigurationManager.GetSection("system.web/authentication"), System.Web.Configuration.AuthenticationSection)
    End Function

我之前使用的是FormsAuthentication.SetAuthCookie,甚至尝试使用FormsAuthentication.RedirectFromLoginPage方法,但这些方法都有相同的结果,这就是为什么我最终做了内部完成的硬cookie实现(通过在Reflector中查看) )FormsAuthentication类可以。


问题是在Visual Studio 2008 asp.net托管环境或IIS 7.0中可重现。


编辑:已启用Cookie,即使托管网站已添加为可信站点。


编辑:Google Chrome和Firefox没有此问题。


编辑:目标计算机上已验证的Cookie设置为在设置4小时后过期(超时= 240分钟)。


编辑:众议院说,每个人都撒谎。用户实际上没有测试新的代码库,并且正在进行预先设想的概念,即该软件仍然被破坏。感谢所有在本主题中回复的人。

关闭此功能不再具有相关性,但请保留它以帮助人们解决问题,因为此问题中有一些非常好的故障排除技术。

7 个答案:

答案 0 :(得分:6)

也可能(以前)没有设置machinekey,因此每次初始化应用程序时都会随机生成(这意味着加密的身份验证票证将使用新密钥加密)。

我使用网站为我的应用生成一个新的机器密钥并将其粘贴在web.config中:

http://www.orcsweb.com/articles/aspnetmachinekey.aspx

<?xml version="1.0"?>

<configuration>

    <appSettings/>
    <connectionStrings/>
    <system.web>

        <machineKey validationKey='FED01BCB246D3477F5854D60388A701508AD1DF9099BD3CAC3CA4DAF55F7524B8DD3FA03133BBCA381BC1CD639730445968DFA633A97911187EF187456D692F4' decryptionKey='861E7DF7C2D04297EEFAD47FF3B95F54E87CF28D6C2753D8' validation='SHA1'/>

    </system.web>
</configuration>

答案 1 :(得分:1)

虽然您的要求适用于IE,但您可以使用Firefox与Firebug和FireCookie来监控您的Cookie和过期。

在IE中,您可以下载IE Developer Toolbar,您可以使用Cache \ View Cookie Information菜单查看您的Cookie值。

如果它在Google Chrome中正常运行会很奇怪,也许您可​​以使用global.asax中的Application_BeginRequest事件捕获请求,并记录收到的Cookie及其值。

答案 2 :(得分:1)

未处理的异常可能导致proc重新启动。这可能会增加奇怪的行为。事件日志中是否有任何报告?

答案 3 :(得分:0)

我含糊地回忆起有关IIS会话超时设置能够覆盖web.config中设置的内容的一些内容。检查您的应用程序属性是否未设置超时10分钟(属性 - >配置 - >选项)。

答案 4 :(得分:0)

过去我遇到过类似的问题,但我不确定这是你在说什么。我是对的,你的问题不会发生在生产系统(或频繁加载的任何系统)上吗?如果是这样,问题可能是工作线程空闲超时。您可以尝试在IIS管理器下更改或关闭它 - >右键单击“应用程序池”,转到“性能”选项卡,它是“空闲超时”下的复选框。您可能还对该对话框的“回收”选项卡上的内容感兴趣。

答案 5 :(得分:0)

客户端未测试生产代码,并且在将修补程序应用于其生产环境之前仍在回复上一期。

如果您无法在同一环境中复制它,我建议您在会议中观看他们复制问题。


48小时后将此标记为答案。

答案 6 :(得分:0)

使用InProc将会话状态更改为存储,您可能面临类似于我的问题,当用户遇到错误时,每次使用InProc存储时,会话基本上都会死亡。

会话类型: http://msdn.microsoft.com/en-us/library/ms178586(v=vs.100).aspx