我正在使用asp.net mvc,C#和jquery。我的网站大量使用ajax。这导致了一个问题,我不知道如何解决它(比我目前的解决方案更好地解决它)。
情景。
问题
解决方案1
问题
用户可以走开,另一个人可能会来,超时消息可能会启动,但他们仍有可能有45秒的时间尝试发出新请求并重置超时。这非常低,并不太担心。
有时我观察到它只是超时(客户端)而我不知道为什么。我永远无法重现问题(似乎发生在其他人身上,但在我测试时却没有)。所以我猜测有些东西没有写入或出现其他问题。
所以数字2真的是我想找到另一个解决方案的重要原因。
解决方案2(推测)。
我想也许我可以制作自己的响应标题或其他什么,如果服务器超时,那么我可以发送一些303重定向或我可以检查的那种性质的东西,然后根据它进行jquery重定向。 / p>
但是我不知道在我的C#代码中该怎么做,或者我可以做那样的事情。
答案 0 :(得分:3)
您可以随时在LogOn操作中添加自定义HTTP标头,该标头可以被AJAX调用拦截并相应地执行操作:
public ActionResult LogOn()
{
Response.AddHeader("X-LOGON", "LogOn");
return View();
}
在成功回调中检查是否存在此标题:
$.ajax({
url: '/home/someaction',
success: function (data, textStatus, XMLHttpRequest) {
if (XMLHttpRequest.getResponseHeader('X-LOGON') === 'LogOn') {
// the LogOn page is being displayed
// probably timeout or unaithorized => act accordingly
}
}
});
答案 1 :(得分:2)
我不明白为什么你的身份验证处理程序(动作过滤器)无法通过返回403(禁止)来处理这个问题,然后通过将window.location设置为/ login来处理AJAX处理程序。
答案 2 :(得分:2)
我基本上做了解决方案1,除了(1)我已将其封装到插件中(2)我在呈现时在页面中注入会话超时。您可以在此http://farm-fresh-code.blogspot.com中查看我的博客article上的详细信息。另外一点是,当客户端超时时,它会自动调用注销操作以实际终止会话。