当前位置 : 主页 > 编程语言 > c语言 >

c# – 你如何克服这个问题? Jquery ajax服务器超时

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在使用asp.net mvc,C#和 jquery.我的网站大量使用ajax.这导致了一个问题,我不知道如何解决它(比我目前的解决方案更好地解决它). 场景. 用户登录我的网站 – cookie设置,服务器超时30分钟
我正在使用asp.net mvc,C#和 jquery.我的网站大量使用ajax.这导致了一个问题,我不知道如何解决它(比我目前的解决方案更好地解决它).

场景.

>用户登录我的网站 – cookie设置,服务器超时30分钟
>用户离开30分钟
>用户回来并点击我的一个启用了ajax的jquery选项卡
>请求发送到服务器
>服务器发送nope用户超时将其发送回登录页面.
>因为它是一个ajax请求,重定向会在选项卡中呈现.它看起来很丑陋(在标签中呈现整个页面),用户可能在这一点上非常困惑.

问题

>就服务器和ajax而言,ajax请求有效并且成功响应被发回.所以我无法检查错误,因为请求成功,而不是正确的数据回来.

解决方案1

>用户登录网站.
> Jquery ajax请求查找用户超时
>超时比服务器超时少60秒
>一旦javascript端超时被击中.出现Jquery对话框并告诉他们他们的会话已过期并强制他们重定向到登录包.

>用户无法单击任何内容,因为对话框会阻止该操作.如果某些用户使用firebug或者他们可以移除它,但服务器超时仍然会生效,他们将获得丑陋的版本(不要在意).

>如果用户发出ajax请求,则重置服务器端的超时以及客户端的超时.

问题

>用户可以走开,另一个人可能会来,超时消息可能会启动,但他们仍有可能有45秒的时间尝试发出新请求并重置超时.这非常低,并不太担心.
>有时我观察到它只是超时(客户端)而我不知道为什么.我永远无法重现问题(似乎发生在其他人身上,但在我测试时却没有).所以我猜测有些东西没有写入或其他出错的地方.

所以2号真的是我想找到另一个解决方案的重要原因.

解决方案2(推测).

我想也许如果我可以制作我自己的响应标题或者其他什么,如果服务器超时那么我可以发送一些303重定向或我可以检查的那种性质的东西然后根据它进行jquery重定向.

但是我不知道在我的C#代码中该怎么做,或者我可以做那样的事情.

您可以随时在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
        }
    }
});
网友评论