【发布时间】:2010-06-21 20:38:40
【问题描述】:
我正在使用 asp.net mvc、C# 和 jquery。我的网站大量使用 ajax。这导致了一个问题,我不确定如何修复它(比我目前的解决方案更好地修复它)。
情景。
- 用户登录到我的网站 - cookie 集,服务器超时 30 分钟
- 用户离开 30 分钟
- 用户返回并单击我启用 ajax 的一个 jquery 选项卡
- 请求发送到服务器
- 服务器不工作,用户超时将他们发送回登录页面。
- 因为它是一个 ajax 请求,所以重定向会在选项卡中呈现。它看起来很难看(整个页面呈现在一个选项卡中),此时用户可能非常困惑。
问题
- 就服务器和 ajax 而言,ajax 请求是有效的,并且成功响应被发回。所以我不能去检查错误,因为请求是成功的,只是没有返回正确的数据。
解决方案 1
- 用户登录网站。
- Jquery ajax 请求找出用户超时
- 超时比服务器超时少 60 秒
- 一旦遇到 javascript 端的超时。 Jquery 对话框出现并告诉他们他们的会话已过期并强制他们重定向以登录包。
- 用户不能点击任何东西,因为对话框会阻止它。如果某些用户使用 firebug 或其他东西可以将其删除,但服务器超时仍然有效,他们会得到丑陋的版本(那就不用管了)。
- 如果用户发出 ajax 请求,服务器端的超时将被重置,客户端的超时也会被重置。
问题
用户可能会走开,另一个人可能会来,并且超时消息可能会出现,但他们仍有可能在 45 秒内尝试发出新请求并重置超时。这个很低,不用太担心。
有时我观察到它只是超时(客户端),我不知道为什么。我永远无法重现问题(似乎发生在其他人身上,但不是在我测试时)。所以我猜有些东西没有写或者其他地方出错了。
所以第 2 点确实是我想要找到另一个解决方案的重要原因。
解决方案 2(推测)。
我在想,如果我可以制作自己的响应标头或其他东西,那么如果服务器超时,那么我可以发送一些 303 重定向或类似性质的东西,我可以检查然后基于此进行 jquery 重定向。
但是我不确定在我的 C# 代码中在哪里执行此操作,或者我是否可以执行类似操作。
【问题讨论】:
-
我将其写为评论,因为我的解决方案非常简单,以至于我感觉我没有理解这个问题。当您从服务器发送响应时,包括信息(在 json 中)是否会话过期。客户端部分将在放入 div 之前对其进行检查。如果过期 => 重定向到登录页面
-
好吧,问题是它永远不会到达发送我的任何 json 的部分。就像服务器超时一样,它仍然不会继续执行操作方法然后阻止它。它在进入方法之前阻止它。所以我不能在那里设置任何东西。
标签: c# jquery asp.net-mvc