2011-09-08 61 views
0

我正在开发一个web应用程序。在这个应用程序中,我使用了GWT2.3。 现在我的问题是关于客户端的会话。 在客户端我一直保持会话像下面客户端会话管理在Web应用程序上刷新浏览器?

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

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

  1. 在onModuleLoad()方法访问服务器并检查用户仍然登录并存储在客户端会话的会话(如你所说的话)。
  2. 将会话存储在非易失性存储中(Cookie或HTML5 localstorage)。但请确保您不存储任何密码或敏感数据。存储会话的散列或唯一标识符。

在任何情况下,请务必阅读并了解有关GWT应用程序的安全性。 这里有两个很好的资源:LoginsecuritySecurity for GWT applications
重要的规则是永远不要相信客户。 始终检查后端上的权限和凭据。

+0

@timen nice link shared ... thanks –

相关问题