HTTP重定向(302)在ajax调用期间的工作方式

HTTP重定向(302)在ajax调用期间的工作方式,ajax,http,redirect,Ajax,Http,Redirect,我被要求在旧的Java7/Struts1Web应用程序上实现“每个帐户一个会话”限制 在开发过程中,我会有一种我无法真正理解的行为 因此,如果有一个帐户“account-A”当前使用会话“session-1234”登录,然后同一个帐户使用不同的会话“session-4567”登录,则会话“session-1234”在该会话执行的下一个请求中被标记为无效 在“会话1234”的无效过程中,步骤之一是将客户端重定向(302)到登录页面 现在我不明白了 如果请求是以“同步”模式发出的,那么一切都会按预期

我被要求在旧的Java7/Struts1Web应用程序上实现“每个帐户一个会话”限制

在开发过程中,我会有一种我无法真正理解的行为

因此,如果有一个帐户“account-A”当前使用会话“session-1234”登录,然后同一个帐户使用不同的会话“session-4567”登录,则会话“session-1234”在该会话执行的下一个请求中被标记为无效

在“会话1234”的无效过程中,步骤之一是将客户端重定向(302)到登录页面

现在我不明白了

如果请求是以“同步”模式发出的,那么一切都会按预期进行

用户点击一些链接

  • 服务器->使会话无效并重定向(302)登录
  • 浏览器->检测302查找位置标题并执行get
  • 服务器->为资源提供服务
  • 浏览器->显示登录并更新URL
  • 如果请求是以“异步”模式(又称AJAX)发出的,那么现在我遇到了问题,因为发生的是页面永远不会更改,登录的内容就显示在那里


    我的问题不是如何解决这个“问题”,而是真正了解它为何会出现这种情况。

    如果您使用的是编程客户端,则有两个主要选项:

  • 不要使用cookie,使用
    授权
    标题,让服务器发出
    401
    ,告诉客户端他们的令牌现在无效
  • 使用javascript客户端,读取服务器是否返回了
    302
    响应和
    Location
    标题,并对其进行响应

  • #2基本上是一种让你模仿标准浏览器行为的黑客#1更适合于API。

    我很感谢您的评论,但我真正想了解的是,当ajax发出客户端请求时,服务器重定向(302)客户端过程的内部工作原理。正如我所说,如果请求是由ajax发出的,然后服务器重定向,那么所发生的是页面(URL)不会更改,重定向的内容显示在同一页面上。非常混乱!!!