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

标签 c# jquery asp.net-mvc

我正在使用 asp.net mvc、C# 和 jquery。我的网站大量使用 ajax。这导致了一个问题,我不确定如何解决它(比我当前的解决方案更好地修复它)。

场景。

  1. 用户登录到我的网站 - cookie 设置,服务器超时 30 分钟
  2. 用户离开 30 分钟
  3. 用户返回并点击我启用了 ajax 的 jquery 选项卡
  4. 请求发送到服务器
  5. 服务器没有用户超时,将他们送回登录页面。
  6. 因为它是一个 ajax 请求,所以重定向在选项卡中呈现。它看起来很难看(在选项卡中呈现整个页面),此时用户可能非常困惑。

问题

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

解决方案一

  1. 用户登录网站。
  2. Jquery ajax 请求找出用户超时
  3. 超时比服务器超时少 60 秒
  4. 一旦 javascript 端超时。 Jquery 对话框出现并告诉他们他们的 session 已过期并强制他们重定向以登录包。
    • 用户无法点击任何内容,因为对话框阻止了点击。如果某些用户使用 firebug 或其他东西,他们可以将其删除,但服务器超时仍然有效,他们将获得丑陋的版本(然后不在乎)。
  5. 如果用户发出 ajax 请求,服务器端和客户端的超时都会重置。

问题

  1. 用户可能会走开,而另一个人可能会过来,超时消息可能会出现,但他们仍有可能有 45 秒的时间尝试发出新请求并重置超时。这个很低,不用太担心。

  2. 有时我观察到它只是超时(客户端),我不知道为什么。我永远无法重现问题(似乎发生在其他人身上,但在我测试时却没有)。所以我猜有些东西没有命中写入或其他地方出了问题。

所以第 2 点确实是我想要找到另一个解决方案的重要原因。

解决方案 2(推测)。

我在想,也许我可以制作自己的响应 header 或其他东西,所以如果服务器超时,我可以发送一些 303 重定向或我可以检查的那种性质的东西,然后基于它进行 jquery 重定向。

但是我不确定在我的 C# 代码中哪里可以这样做,或者我是否可以做类似的事情。

最佳答案

您始终可以在登录操作中添加自定义 HTTP header ,该 header 可以被 AJAX 调用拦截并采取相应行动:

public ActionResult LogOn()
{
    Response.AddHeader("X-LOGON", "LogOn");
    return View();
}

并在成功回调中检查此 header 是否存在:

$.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
        }
    }
});

关于c# - 你将如何克服这个问题? Jquery + ajax + 服务器超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088347/

相关文章:

c# - Xamarin.Forms(可移植)解决方案中的 Xamarin.Mac 项目

c# - 如何在 C# 应用程序中获取外部窗口的名称?

c# - 设置字符串的最大长度c#但以整个单词结尾

javascript - 来自字符串的 Jquery JSON 数组

jquery - 是否可以用我自己的图像更改滚动条?

c# - 使用 EF 插入具有多对多关系的操作

c# - ASP.NET 将图片添加到 TableCell

javascript - 当代码等于给定文本时显示 div

c# - 如何在派生 Controller 操作上添加不同的操作过滤器?

asp.net - Httphandler 可重用内存如何工作?