Asp.net 在通用http处理程序中处理会话超时

Asp.net 在通用http处理程序中处理会话超时,asp.net,session,httphandler,form-authentication,Asp.net,Session,Httphandler,Form Authentication,我有一个应用程序,其中大约有20个http通用处理程序用于ajax调用 我已使用IReadOnlySessionState在处理程序中访问会话。一切正常。 但当会话到期时,我的处理程序将返回一些html,因为它将重定向到默认页面,并且默认页面的html将在响应中发送回来。 来克服这个问题。 我已经检查了处理程序中的会话变量,如果它为null,我已经编写了 context.Response.Write("logout") 我在jqueryajax中检查是注销还是其他 $.ajax({

我有一个应用程序,其中大约有20个
http通用处理程序
用于
ajax调用

我已使用
IReadOnlySessionState
在处理程序中访问会话。一切正常。

但当会话到期时,我的处理程序将返回一些html,因为它将重定向到默认页面,并且默认页面的html将在响应中发送回来。

来克服这个问题。
我已经检查了处理程序中的会话变量,如果它为null,我已经编写了

 context.Response.Write("logout")
我在jqueryajax中检查是注销还是其他

  $.ajax({
            url: "myhandler.ashx",
            contentType: "application/json; charset=utf-8",
            success: function (data) { checklogout(data); $("#loading").hide(); },
            error: function () { $("#loading").hide(); },
            async: false
         });

如果是注销,则我已使用位置重定向到登录页面。
我正在使用
表单身份验证
对用户进行身份验证


有没有更好的方法可以使用jquery ajax调用检查并重定向到登录页面。

您的处理程序位于一个目录中,该目录通过asp.net的身份验证自动控制

我应该做的是,不要让asp.net通过web.config上的安装程序自动控制对处理程序的调用,这样,当用户未登录到以太时,将完成对处理程序的调用。如果调用该处理程序的用户具有会话和身份验证,我将在处理程序内部检查这一点

然后,如果用户没有身份验证来读取该处理程序,我将向ajax调用返回一个简单标志,然后识别并重定向,例如:

$.ajax({
    url: "myhandler.ashx",
    contentType: "application/json; charset=utf-8",
    success: function (data) 
    { 
        if(data.redirectToLogin == true)
        {
            window.location = "/login.aspx"
        }
        else
        {
            // do the rest job
        }
    },
    error: function () 
    { 
        $("#loading").hide(); 
    }
 });

最好是返回一个正确的,比如401unauthorized(从处理程序返回)(或者创建一个基处理程序,这样就不会重复逻辑)。您可以在中央AJAX选项(
$.ajaxsetup
)中查找此值,因此要检查的代码只需要放在一个地方。这就是你想要的吗?这似乎是个好主意。但是当
data
没有属性
redirectToLogin
时,它是否会给出
java脚本
异常。此外,如果我在我的webconfig文件中使用
,尽管我会检查所有处理程序中的用户会话,但会不会存在任何安全威胁。@krshekhar您可以简单地返回一个字符串,如“ko”或其他标志,这很容易解决。