【问题标题】:Session management in GWT without using Java on the server?GWT 中的会话管理而不在服务器上使用 Java?
【发布时间】:2010-09-24 20:15:27
【问题描述】:

我将 GWT 用于我的客户端应用程序。我没有为服务器使用 GWT/Java。但是,我不确定如何处理会话管理。 GWT 应用程序驻留在一个页面上,所有服务器调用都通过 AJAX 完成。如果服务器上的会话过期......假设用户没有关闭浏览器,而是让应用程序保持打开状态,我的服务器如何通知应用程序会话已过期并且客户端部分应显示登录屏幕再来一次?

客户端会话管理是什么意思?这似乎天生就不安全。

我不是在寻找代码。我正在寻找想法、技术、潜在的解决方案等。我考虑过 Comet http://en.wikipedia.org/wiki/Comet_(programming),但如果不在服务器端使用 Java,这似乎不会很好地工作。也许我错了?我也不想轮询服务器。

有什么想法或见解?

【问题讨论】:

    标签: java javascript gwt


    【解决方案1】:

    在不知道你的 RPC 是如何工作的情况下,很难给出好的建议。

    如果您的 AJAX 服务要求对用户进行身份验证(IE 具有有效会话),则可以发送 401 错误说明该用户无效。客户端可以将 401 错误解释为应设置用户进行重新身份验证的消息。

    【讨论】:

    • 我没有使用 RPC,GWT 请求对象只是 XMLHttpRequest 的包装器。好点子!我从来没有想过改变http状态码。我可能最终会使用它。
    【解决方案2】:

    我们在我们的应用程序中处理了这个问题,通过检测服务器何时将重定向发送回登录屏幕(它将来自对 Ajax 调用的响应),并弹出一个对话框再次询问用户他们的密码,但是预先填写他们的用户名。然后我们将它发布到登录页面所在的位置,就好像它是登录页面一样,因此用户自动登录到这个新会话。最后我们只是再次重新提交了 ajax 调用,因此对用户来说这是一个无缝的过程(例如:他们不必再次单击该操作)。

    由于我们将所有状态存储在客户端上,而不是在会话变量中,因此我们在尝试跨会话持久化数据时没有任何问题。

    【讨论】:

      【解决方案3】:

      如果会话在服务器端过期会发生什么,那么下次客户端向服务器发送请求时,它将创建一个新会话,或者更有可能向客户端发送一条消息它试图在没有会话的情况下访问页面,并将它们发送到登录屏幕。但是,您仍然需要等到客户端向服务器发送消息。

      【讨论】:

        猜你喜欢
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        相关资源
        最近更新 更多