簡體   English   中英

刷新瀏覽器后,Web應用程序中的客戶端會話管理?

[英]Client session management in web application on refresh of browser?

我正在使用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);

現在,當我刷新瀏覽器時,會話實例變為null,所有會話變量也變為null。

我想到的一種方法是首先刷新,然后單擊服務器以獲取登錄用戶,然后再次設置客戶端會話登錄用戶。 因此,在客戶端需要登錄用戶的許多地方,它將在刷新瀏覽器后運行。

但是我不確定這是否是正確的方法。 所以請給我建議這種情況,有什么好辦法嗎? 提前致謝

是的,訪問服務器並查詢用戶是否已登錄是一個可行的解決方案。 我可以想到以下解決方案:

  1. 在onModuleLoad()方法中,訪問服務器,並檢查用戶是否仍然登錄並將該會話存儲在您的客戶端會話中(如您建議的那樣)。
  2. 將會話存儲在非易失性存儲中(Cookie或HTML5 localstorage)。 但是,請確保您不存儲任何密碼或敏感數據。 存儲您的會話的哈希或唯一標識符。

無論如何,請確保您已閱讀並了解GWT應用程序中的安全性。 這里有兩個很好的資源: LoginsecurityGWT應用程序的安全性
重要的規則是永遠不要信任客戶。 始終檢查后端的權限和憑據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM