bgs*_*264 5 asp.net iis-6 session-state session-timeout asp.net-4.0
我在用户通过申请表时丢失会话数据时遇到了一些麻烦。看起来他们正在通过应用程序表单丢失会话状态。(ASP.NET 4.0 WebForms 项目,IIS 6.0)
会话存储在状态服务器的进程外,因此它不是配置更改、应用程序域回收等 AFAIK。
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20" />
Run Code Online (Sandbox Code Playgroud)
我正在使用表单身份验证,滑动过期工作正常,正如您从下面的日志中看到的那样 - 您可以看到票证过期时间是正确的,并且按预期延长。
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
我启用了一些自定义日志记录以尝试跟踪此情况。在每次Session_Start发生火灾时,global.asax我都会记录一些内容,并且每次有人加载应用程序表单或单击“下一步”以在浏览应用程序表单时在各个部分(在 MultiView 中)之间移动时,我也会记录一些内容。
以下是人们丢失会话状态的两个示例。日志以日志条目的日期/时间开始,然后是一些措辞。括号中的第二个日期/时间(在措辞之后)是 FormsAuthentication cookie 的到期日期/时间,源自CType(ctx.User.Identity, FormsIdentity).Ticket.Expiration.ToString
日志记录还会记录用户的 IP 地址和会话 ID。在将它们粘贴到此处之前,我已将其删除,我可以确认所有日志条目的 IP 地址和会话 ID 都相同。
示例 1:
**[26/10/2010 13:07] 会话开始 []** [26/10/2010 13:11] 申请表第一页_加载 [26/10/2010 13:31:19] [26/10/2010 13:13] 下一次点击应用表单,当前索引为 1 (vwSection1) [26/10/2010 13:31:19] [26/10/2010 13:14] 下一次点击应用表单,当前索引为 2 (vwSection2) [26/10/2010 13:31:19] [26/10/2010 13:15] 下一次点击应用表单,当前索引为 3 (vwSection3) [26/10/2010 13:31:19] [26/10/2010 13:20] 下一次点击应用表单,当前索引为 5 (vwSection4) [26/10/2010 13:31:19] [26/10/2010 13:20] 下一次点击应用表单,当前索引为 6 (vwSection5) [26/10/2010 13:31:19] [26/10/2010 13:20] 下一次点击应用表单,当前索引为 7 (vwMonitoring) [26/10/2010 13:31:19] [26/10/2010 13:21] 下一次点击应用表单,当前索引为 8 (vwInformation) [26/10/2010 13:31:19] [26/10/2010 13:22] 申请表第一页_加载 [26/10/2010 13:41:22] [26/10/2010 13:25] 下一次点击应用表单,当前索引为 1 (vwSection1) [26/10/2010 13:41:22] [26/10/2010 13:26] 下一次点击应用表单,当前索引为 2 (vwSection2) [26/10/2010 13:41:22] [26/10/2010 13:26] 下一次点击应用表单,当前索引为 3 (vwSection3) [26/10/2010 13:41:22] [26/10/2010 13:28] 下一次点击应用表单,当前索引为 5 (vwSection4) [26/10/2010 13:41:22] [26/10/2010 13:28] 下一次点击应用表单,当前索引为 6 (vwSection5) [26/10/2010 13:41:22] [26/10/2010 13:28] 下一次点击应用表单,当前索引为 7 (vwMonitoring) [26/10/2010 13:41:22] [26/10/2010 13:28] 下一次点击应用表单,当前索引为 8 (vwInformation) [26/10/2010 13:41:22] **[26/10/2010 13:28] 会话开始 [26/10/2010 13:41:22]** [26/10/2010 13:31] 申请表第一页_加载 [26/10/2010 13:51:24] [26/10/2010 13:31] 下一次点击应用表单,当前索引为 1 (vwSection1) [26/10/2010 13:51:24] [26/10/2010 13:32] 下一次点击应用表单,当前索引为 2 (vwSection2) [26/10/2010 13:51:24] [26/10/2010 13:32] 下一次点击应用表单,当前索引为 3 (vwSection3) [26/10/2010 13:51:24] [26/10/2010 13:32] 下一次点击应用表单,当前索引为 5 (vwSection4) [26/10/2010 13:51:24] [26/10/2010 13:32] 下一次点击应用表单,当前索引为 6 (vwSection5) [26/10/2010 13:51:24] [26/10/2010 13:32] 下一次点击应用表单,当前索引为 7 (vwMonitoring) [26/10/2010 13:51:24] [26/10/2010 13:32] 下一次点击应用表单,当前索引为 8 (vwInformation) [26/10/2010 13:51:24]
示例 2:
**[24/10/2010 17:44] 会话开始 []** [24/10/2010 17:50] 申请表第一页_加载 [24/10/2010 18:10:13] [24/10/2010 18:00] 下一次点击应用表单,当前索引为 1 (vwSection1) [24/10/2010 18:20:40] **[24/10/2010 18:07] 会话开始 [24/10/2010 18:20:40]** [24/10/2010 18:08] 下一次点击应用表单,当前索引为 2 (vwSection2) [24/10/2010 18:20:40] [24/10/2010 18:10] 下一次点击应用表单,当前索引为 2 (vwSection2) [24/10/2010 18:20:40] [24/10/2010 18:10] 下一次点击应用表单,当前索引为 1 (vwSection1) [24/10/2010 18:30:42] [24/10/2010 18:10] 下一次点击应用表单,当前索引为 1 (vwSection1) [24/10/2010 18:30:52] [24/10/2010 18:10] 下一次点击应用表单,当前索引为 1 (vwSection1) [24/10/2010 18:30:58] [24/10/2010 18:12] 申请表第一页_加载 [24/10/2010 18:31:35] [24/10/2010 18:12] 下一次点击应用表单,当前索引为 1 (vwSection1) [24/10/2010 18:31:35] [24/10/2010 18:13] 下一次点击应用表单,当前索引为 2 (vwSection2) [24/10/2010 18:31:35] [24/10/2010 18:13] 下一次点击应用表单,当前索引为 2 (vwSection2) [24/10/2010 18:31:35] [24/10/2010 18:16] 下一次点击应用表单,当前索引为 3 (vwSection3) [24/10/2010 18:31:35] [24/10/2010 18:16] 下一次点击应用表单,当前索引为 5 (vwSection4) [24/10/2010 18:31:35] [24/10/2010 18:17] 下一次点击应用表单,当前索引为 6 (vwSection5) [24/10/2010 18:31:35] [24/10/2010 18:18] 下一次点击应用表单,当前索引为 7 (vwMonitoring) [24/10/2010 18:31:35] [24/10/2010 18:18] 下一次点击应用表单,当前索引为 8 (vwInformation) [24/10/2010 18:31:35]
您可以在第一个示例中看到会话最初在 13:07 开始,但也在 13:28 开始。
您可以在第二个示例中看到会话最初在 17:44 开始并在 18:07 重新启动。
我了解这些时间是在会议开始后 20 分钟。但会议并没有闲着。您可以看到它没有空闲,因为日志的其余部分。单击应用程序表单中的“下一步”从会话状态中获取对象
Dim m As Member = StateManager.CurrentMember
Run Code Online (Sandbox Code Playgroud)
然后获取/设置“m”的属性。
所以,对我来说,看起来即使用户没有空闲并访问他们的会话变量,他们仍然在开始 20 分钟后丢失他们的会话。请注意,在我的 Base Page(所有页面都继承自,Base Page 继承 System.Web.UI.Page)中,我现在已经开始将当前毫秒写入会话状态,因此我一直在写入会话。
用户正在丢失他们的会话状态,因为 StateManager.CurrentMember(它只是HttpContext.Current.Session("CurrentMember"))返回 null。当我尝试将它附加到实体框架数据上下文时,这会产生一个未处理的异常 - 因此用户可以看到我的通用错误处理页面。
任何想法表示赞赏。
您提到您正在使用 FormsAuthentication。您是否将滑动过期属性设置为 true?
http://msdn.microsoft.com/en-us/library/1d3t3c61(v=VS.100).aspx
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |