2012-12-25 127 views
6

我有一个应用程序,其中大约20 http generic handler用于ajax call
我已经使用IReadOnlySessionState访问我的处理程序中的会话。一切正常。
在通用http处理程序中处理会话超时

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

解决此问题。
我在处理程序检查会话变量,如果它是空的我已经写

context.Response.Write("logout") 

我在jQuery的阿贾克斯天气,查看其是否注销或其他任何东西。

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


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

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

+1

这可能会更好从你的处理程序返回一个正确的[HTTP状态码](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html),例如* 401 Unauthorized *(也许创建一个基本处理程序,这样你不重复这个逻辑)。你可以在你的中央AJAX选项('$ .ajaxsetup')中查找这个值,因此只需要在一个地方查看代码。这是你正在寻找什么? –

回答

2

您的处理程序位于通过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(); 
    } 
}); 
+0

似乎是个好主意。但是当'data'没有属性'redirectToLogin'时,它会给出一个'java-script'异常。另外,如果我在我的webconfig文件中使用'',将会有任何安全威胁,尽管我会检查所有处理程序中的用户会话。 –

+1

@krshekhar你可以简单地返回一个像“ko”或其他标志的字符串,这很容易解决。 – Aristos