4

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

4

2 回答 2

1

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

window.location = 'http://someurl.com';

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

于 2009-01-14T15:01:58.097 回答
1

我最近完成了一种处理 401 的方法,我认为它也适用于您。.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 中并且正在重定向任何错误,不仅是 401,而且您明白了):

$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
  window.location.href('/error.aspx');
});
于 2009-09-29T19:22:10.347 回答