2010-12-06 126 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?