2010-12-06 121 views
0

我已經實現了一個Servlet,並且一個PHP站點正在訪問該Servlet來檢索數據。我想知道什麼是存儲會話變量的最佳方法,或者我應該存儲它。JSP/Servlets會話+ PHP:跟蹤會話 - JSON /數據庫或HttpSessionListener?

變量需要被存儲的數據包括一個ArrayList,和其它的目的。

(1)實施HttpSessionListener,並存儲每個會話(當它的創建)爲靜態SessionMap:

我已經經歷約3的可能性想。然後刪除會話,一旦它被銷燬。

(2)以JSON格式存儲所有內容。所以我將不得不序列化/反序列化每個對象並來回傳遞它。 (我有每個ArrayList/Object中的項目列表,我希望跟蹤用戶點擊之間的項目)。

(3)使用SessionID作爲主鍵將信息存儲在MongoDB中(僅用於選擇一個)。

你們認爲什麼?

回答

0

我更喜歡三者的結合。

  1. 具有簡單性的優點 - 如果有可用會話,無需轉到數據庫。
  2. JSON是輕量級的,它是瀏覽器的語言。
  3. 存儲在數據庫中的項目和使用會話ID檢索它們允許用戶可能啓動會話,把它留在一個不完整的狀態,稍後再回來拿起他們離開的地方。如果內存需求變得龐大而繁瑣,數據庫可能是存儲信息的好方法。

我不相信這是一個排他性的選擇。

0

這裏不需要HttpSessionListener。你基本上需要在servlet中做的事情是:

List<String> links = (List<String>) request.getSession().getAttribute("links"); 
if (links == null) { 
    links = new ArrayList<String>(); 
    request.getSession().setAttribute("links", links); 
} 
links.add(request.getParameter("link")); 

當會話被破壞時,這些屬性將被無意中刪除。

JSON只會增加不必要的開銷和數據庫是唯一有利的時候有沒有在Web服務器的內存空間(但是,DB的反過來也吃內存在一定程度上)。

我只是想知道你是怎麼想保持從PHP在同一個servlet會話。這將涉及使用URL中的JSESSIONID屬性(壞主意)或用curl充當代理的PHP腳本調用servlet(爲什麼不只是在PHP中完成所有操作?)。或者它在同一個域上運行?或者,您是否使用Quercus在Java servletcontainer上運行PHP?