检测处理程序中的身份验证超时并将整个页面重定向到登录页面

时间:2009-01-14 14:55:42

标签: asp.net jquery forms-authentication httphandler

我正在编写一个应用程序,有人可以编辑网页上的段落。 jQuery用于将已编辑的段落数据发送和接收到处理程序,处理程序将其保存或从数据库中读取。问题是,如果表单身份验证已超时,我将从我的处理程序返回登录页面。如果身份验证超时并将整个页面重定向到登录页面,我是否可以在客户端或服务器上检测到?

2 个答案:

答案 0 :(得分:1)

在我的应用程序中,在客户端,我检查返回页面的HTTP状态。如果是401(未授权错误),我在模态对话框中显示登录表单。您可以像这样重新进行身份验证,或者只使用

进行重定向
window.location = 'http://someurl.com';

这需要服务器的合作来返回401,但这对我来说似乎是最干净的方式。

答案 1 :(得分:1)

我最近完成了一种处理401s的方法,我认为这也适用于你。 .NET的过去版本中的问题是错误页面不会返回正确的错误代码,它们只返回到指定页面302.

使用.NET 3.5,您的错误处理程序可以使用redirectMode“重写”而不是“重定向”:

<customErrors mode="On" defaultRedirect="/err.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="/404.aspx"/>
</customErrors>

由于所有请求(包括Web服务调用)现在都将返回正确的HTTP状态代码,因此您可以在javascript中正确使用404/401/500代码。

然后,在你的客户端代码中(这是在jQuery中并重定向任何错误,不仅是401s,而且你明白了):

$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
  window.location.href('/error.aspx');
});