jQuery AJAX trampoline重定向

时间:2009-07-13 20:34:38

标签: jquery ajax authentication redirect xmlhttprequest

我正在网站上工作,用户获得30分钟的Cookie,并且在到期后,对服务器的任何调用都会重定向到“会话已过期,请点击此处重新登录屏幕”。这是皱纹:

当用户访问会话过期页面时,该页面的URL是他们尝试访问的页面的URL。单击“再次登录”链接会将用户带到一个通用登录页面,该页面使用推荐URL(他们试图访问的URL),让他们回到最初尝试去的地方,而不是通用的“欢迎” “屏幕。

因此,如果我向服务器发出一个AJAX调用并告诉它用响应填充一些div,我会得到一个div,里面有“session expired”页面。

但是,我只获得一次“会话过期”页面。因此,例如,如果我有两个窗口打开到同一个站点,并且我单击一个链接,我将得到会话过期错误。如果我切换窗口并单击另一个链接,我会得到通用登录页面。所以我只看到“会话过期”页面一次。

现在,我查看了这个问题:

How to manage a redirect request after a jQuery Ajax call

并且能够取得非常重要的进展,至少在我的理解中,但从我所知道的,这个解决方案基本上有jquery捕获响应并将页面引用到通用登录页面。

我不确定这是否与我想要的一样。首先,不清楚登录页面是否总是将我的页面(ajax页面)视为推荐。还有另一个问题,也许也不重要,但也可能是。

由于这个蹦床重定向(我希望这个案例是正确的术语),POST数据往往会在重新登录后打破反弹。它收到有关URL长度错误的服务器错误。

现在,我已将其设置为如果服务器响应不是200,则输出xmlHttp响应,在第一次触发时获得“您正被重定向,是否可以?”来自浏览器的提醒。在第二次触发时,我以完整的HTML代码获取登录页面。 (实际上这取决于浏览器.Chrome只是噘嘴)。

所以,如果可以的话,我想要的是三件事:

  1. 如果响应不是200,则整个页面应替换为返回的xmlHttp响应(作为重定向,但不替换为地址,仅替换为服务器尝试重定向到的页面),以及

  2. 页面的重定向/重绘不应该包含任何帖子数据,所以我在想:

  3. 这应该在真正的查询发生之前作为全局函数完成。

  4. 所以我迷失的细节是:

    如何正确地重定向整个页面(你必须记住,一旦我得到响应,我就无法触发页面重定向,因为那时我不会得到“会话过期”页面。)

    如果我可以设置一个函数(Ajax事件,我相信),这将使我的所有ajax函数的测试调用无需从每个ajax函数引用该text-call-function FROM。我在jquery网站上的Ajax事件文档中真的迷失了,因为它似乎有些时候听起来是自动的(就像它会在不管我调用它的情况下运行),而其他时候它似乎是一种使这个光滑的方式功能,它应该做它应该但只适用于那些记得要求它的ajax函数。

    最后的说明,我感谢所有读过这篇文章的人:

    会话过期窗口很可能对于用户返回到预重新认证所来自的页面并不重要。这里的目标之一是尽可能保持用户体验的完整性。虽然这个网站的普通用户可能甚至不喜欢崩溃屏幕,但他们确实预料到了这一点,而从私人网站转到简单的“用户名/密码”页面会让人分心,甚至对一些用户也有用。

1 个答案:

答案 0 :(得分:0)

我刚刚想到了一个解决方案,但我仍然需要解决这些问题:

由于会话开始存储在cookie中,我可以拥有一个函数,在任何ajax请求之前,检查cookie是否设置为expire。如果是,我可以使用相同的URL重新加载他们所在的页面,这将会到达会话过期的页面。