JSP / Servlets会话+ PHP:跟踪会话 - JSON /数据库或HttpSessionListener?

时间:2010-12-06 02:56:24

标签: php json servlets mongodb sessionid

我已经实现了一个Servlet,并且PHP站点正在访问该Servlet以检索数据。我想知道存储会话变量的最佳方法是什么,或者我是否应该存储它。

需要存储的变量包括ArrayList和其他对象。

我已经考虑了大约3种可能性:

(1)实现HttpSessionListener,并将每个会话(在创建时)存储到静态SessionMap中。然后在会话被销毁后删除它。

(2)将所有内容存储在JSON中。所以我必须序列化/反序列化每个Object并来回传递它。 (我想在用户点击之间跟踪每个ArrayList / Object中的项目列表。)

(3)使用SessionID作为主键将信息存储在MongoDB中(只是选择一个)。

你们觉得怎么样?

2 个答案:

答案 0 :(得分:0)

我更喜欢这三种组合。

  1. 具有简单的优点 - 如果有可用的会话,则无需访问数据库。
  2. JSON是轻量级的,它是浏览器的语言。
  3. 将项目存储在数据库中并使用会话ID检索它们允许用户启动会话,使其处于不完整状态,然后返回以便从中断处继续。如果内存需求变得庞大且繁琐,数据库可能是存储信息的好方法。
  4. 我不相信它必须是一个独家选择。

答案 1 :(得分: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只会增加不必要的开销,只有当webserver中的内存空间不足时,数据库才有用(但是,DB反过来也会在一定程度上占用内存)。

我只是想知道如何从PHP维护相同的servlet会话。这将涉及使用URL中的JSESSIONID属性调用servlet(坏主意)或使用curl充当代理的PHP脚本(为什么不在PHP中完成所有操作?)。或者它是否在同一个域上运行?或者您使用Quercus在Java servletcontainer上运行PHP吗?