如何使用表单身份验证解决asp.net应用程序中的随机注销问题

时间:2013-09-18 15:47:01

标签: c# asp.net

我有一个相当大规模的Web应用程序与内部网上运行的多个应用程序进行通信。默认会话超时为20分钟。此应用程序具有某些可编辑的小部件。此应用程序的某些用户在仅仅记录几分钟后在小部件上编辑数据时经历了随机注销。我没有在我的机器上看到这样的注销。如何解决此类注销问题?

应用程序日志通常具有以下类型的条目

活动代码:4005 事件消息:请求的表单身份验证失败。原因:提供的故障单已过期。 活动时间:19/09/2013 16:19:00 活动时间(UTC):19/09/2013 15:19:00 事件ID:bfedac01cc514bedb236347b8585a4e3 事件序列:31083 事件发生:820 活动详细信息代码:50202

申请信息:     应用程序域:/ xx / xxxxxxx信任级别:完整     应用虚拟路径:/     申请路径:C:\ xxx \ xxx \     机器名称:xxxxx

流程信息:     进程ID:56940     进程名称:w3wp.exe     帐户名称:NT AUTHORITY \ NETWORK SERVICE

请求信息:     请求网址:http://www.xxxx请求路径:/xxxxx.aspx     用户主机地址:xxx.xxx.xxx.205     用户:
    经过身份验证:错误     验证类型:
    线程帐户名称:NT AUTHORITY \ NETWORK SERVICE

要进行身份验证的名称:

1 个答案:

答案 0 :(得分:2)

解决此类意外注销的唯一可靠方法是让用户使用客户端http调试器(如Fiddler)记录他们的会话。

在客户端后台打开fiddler运行应用程序将记录所有请求和响应。然后,当发生意外故障时,用户选择完整的跟踪(所有请求),将所有内容导出到文件并发送给您。

然后,作为开发人员,您打开Fiddler,导入用户跟踪并围绕失败的请求进行分析。

您搜索的是与Cookie相关的回复行为。通常,表单身份验证cookie随请求一起发送到服务器,以便对用户进行身份验证。另一方面,失败的请求可能应该没有这样的cookie ,这表明已经以某种方式删除了。

这就是它变得有趣的地方。删除cookie的唯一方法是手动删除它或从服务器接收删除cookie的先前响应。从您的开发人员角度来看,当您致电FormsAuthentication.SignOut时会触发删除Cookie。

在分析跟踪时,您只是尝试找到罪魁祸首请求 - 请求之前到失败的请求 - 导致cookie被删除的请求客户端。

在这样的罪魁祸首请求中有什么特别之处 - 它取决于您的服务器端代码,并且有很多可能的原因,从配置问题到错误代码。

然而,这绝对是开始调查的一种方式。