2011-09-08 99 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 –

相關問題