我已经实现了一个Servlet,并且PHP站点正在访问该Servlet以检索数据。我想知道存储会话变量的最佳方法是什么,或者我是否应该存储它。
需要存储的变量包括ArrayList和其他对象。
我已经考虑了大约3种可能性:
(1)实现HttpSessionListener,并将每个会话(在创建时)存储到静态SessionMap中。然后在会话被销毁后删除它。
(2)将所有内容存储在JSON中。所以我必须序列化/反序列化每个Object并来回传递它。 (我想在用户点击之间跟踪每个ArrayList / Object中的项目列表。)
(3)使用SessionID作为主键将信息存储在MongoDB中(只是选择一个)。
你们觉得怎么样?
答案 0 :(得分:0)
我更喜欢这三种组合。
我不相信它必须是一个独家选择。
答案 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吗?