我遇到了一个非常糟糕的问题,无论我尝试什么,用户都会在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分钟)。
编辑:众议院说,每个人都撒谎。用户实际上没有测试新的代码库,并且正在进行预先设想的概念,即该软件仍然被破坏。感谢所有在本主题中回复的人。
关闭此功能不再具有相关性,但请保留它以帮助人们解决问题,因为此问题中有一些非常好的故障排除技术。
答案 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