浏览器刷新时Web应用程序中的客户端会话管理?

时间:2011-09-08 04:47:10

标签: java session gwt

我正在开发一个Web应用程序。在这个应用程序中,我使用了GWT2.3。 现在我的问题是关于客户端的会话。 在客户端,我保持了如下的会话

public class WorkFlowSessionFactory {
private static HashMap session;

private WorkFlowSessionFactory() {
}

public static HashMap getClientSessionInstance() {
    if (session == null) {
        session = new HashMap();
    }
    return session;
}

public static Object getValue(WorkFlowSesisonKey key) {
    return getClientSessionInstance().get(key);
}

public static void putValue(WorkFlowSesisonKey key, Object value) {

    getClientSessionInstance().put(key, value);
}
public static void remove(WorkFlowSesisonKey key)
{
    getClientSessionInstance().remove(key);
}

public static void resetSessionUser(User user) {
    session.remove(WorkFlowSesisonKey.LOGGEDIN_USER);
    session.put(WorkFlowSesisonKey.LOGGEDIN_USER, user);
}

}

现在登录成功后,我将登录用户放在客户端会话和服务器端 会议如下

session.put(WorkFlowSesisonKey.LOGGEDIN_USER, user);

现在当我刷新浏览器时,会话实例变为空。所有会话变量也为空。

我想到的一种方法是首先刷新我使服务器命中以获取登录用户并再次设置 客户端会话登录用户。因此,在客户端的许多地方需要登录用户 它将在刷新浏览器后工作。

但我不确定这是否是正确的做法。 所以请建议我这个案例,有什么好办法吗? 提前致谢

1 个答案:

答案 0 :(得分:1)

是的,访问服务器并查询用户是否已登录是一种可行的解决方案。我可以想到以下解决方案:

  1. 在onModuleLoad()方法中,访问服务器并检查用户是否仍然登录并将会话存储在客户端会话中(如您所建议的那样)。
  2. 将会话存储在非易失性存储(Cookie或HTML5 localstorage)中。但请确保您不存储任何密码或敏感数据。存储会话的哈希或唯一标识符。
  3. 在任何情况下,请确保您阅读并了解GWT应用程序中的安全性。 以下是两个好的资源:LoginsecuritySecurity for GWT applications 重要的规则是永远不要相信客户。 始终检查后端的权限和凭据