处理通用http处理程序中的会话超时

शेख*_*ेखर 6 asp.net session httphandler form-authentication

我有一个应用程序,其中约20个http generic handler用于ajax call.
我用IReadOnlySessionState我的处理程序访问会话.一切正常.

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

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

 context.Response.Write("logout")
Run Code Online (Sandbox Code Playgroud)

我检查jQuery ajax天气它是注销或其他任何东西.

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


如果它是注销,那么我使用位置重定向到登录页面.
form-authentication用来验证用户.

有没有更好的方法来检查和使用jquery-ajax调用重定向到登录页面.

Ari*_*tos 2

您的处理程序位于由 asp.net 身份验证自动控制的目录中。

我应该做的是不要通过在 web.config 上设置来自动控制 asp.net 身份验证,以便对处理程序的调用将在用户登录时完成,并且在处理程序内我将检查这一点,调用该处理程序的用户是否具有会话和身份验证。

然后,如果用户没有身份验证来读取该处理程序,我将一个简单的标志返回到我的 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(); 
    }
 });
Run Code Online (Sandbox Code Playgroud)