1

情况

  • 用户正在使用 JSF 2.1 和 Richfaces 4.3.4 Web 应用程序
  • 用户决定休息一下
  • 管理员重新启动 Web 服务器
  • 用户回来并想做一个动作(作为 AJAX 请求实现)

问题:什么都没有发生。

AJAX 响应:

<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
  <changes>
    <update id="javax.faces.ViewState">
      <![CDATA[867555705194888199:-2060396069426176324]]>
    </update>
  </changes>
</partial-response>

应该发生什么:转发到登录页面。

由于会话不再可用,因此将整页请求重定向到登录页面。使用 AJAX 技术在 Web 应用程序(Richfaces/JSF/jQuery)中实现会话超时处理的最佳方法是什么?

4

1 回答 1

3

最好的用户体验是要求用户再次登录,建立一个新的登录会话并恢复到用户上次在浏览器中的位置。

这需要以一种保留用户在浏览器中的位置的方式进行登录,例如通过可以变得可见的登录覆盖(在当前页面上),通过 ajax 执行此操作,然后在成功时离开,将用户留在他们所在的位置(还有其他方法可以做到这一点)。

但是,所有这一切都取决于您希望在此特定案例的用户体验上投入多少时间。如果您认为这种情况很少见并且用户的未保存状态可能很低,那么您可以将他们撞到登录页面并让他们重新开始会话。如果这是经常发生的情况,或者如果用户有很多他们不想丢失的未保存状态,那么您将需要投资一种机制,让他们在不丢失该状态的情况下再次登录。

如果您要问的是如何在客户端中为会话消失编写代码,那将取决于您的服务器在收到无效或过期会话的请求时返回给 ajax 调用的内容。根据服务器返回的行为,您需要确保可以在 ajax 处理中处理它。如果是错误,则需要处理错误情况。如果它是某种类型的有效 ajax 响应,您需要确保您正在处理它。

如果当会话在 ajax 调用上无效时,您已经从服务器的 ajax 调用产生了一个已知的错误返回条件,那么您只需要修复您的客户端代码以检测该条件。我们必须查看错误情况并查看您的客户端 ajax 代码以了解具体建议。

于 2013-10-26T20:21:18.733 回答