【问题标题】:JSP/Servlets Sessions + PHP : Keeping track of sessions - JSON / Database or HttpSessionListener?JSP/Servlets 会话 + PHP:跟踪会话 - JSON/数据库还是 HttpSessionListener?
【发布时间】:2011-05-20 18:04:43
【问题描述】:

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

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

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

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

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

(3) 将信息存储在 MongoDB 中(随便挑一个),使用 SessionID 作为主键。

你们怎么看?

【问题讨论】:

    标签: php json servlets mongodb sessionid


    【解决方案1】:

    我更喜欢三者的结合。

    1. 具有简单的优点 - 如果有可用的会话,则无需访问数据库。
    2. JSON 是轻量级的,它是浏览器的语言。
    3. 将项目存储在数据库中并使用会话 ID 检索它们允许用户启动会话,使其处于不完整状态,然后再回来继续他们离开的地方。如果内存需求变得庞大且繁琐,那么数据库可能是存储信息的好方法。

    我不认为它必须是一个排他性的选择。

    【讨论】:

      【解决方案2】:

      这里不需要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 属性调用 servlet(坏主意)或使用 curl 作为代理的 PHP 脚本(为什么不只在 PHP 中完成这一切?)。还是在同一个域上运行?还是您使用 Quercus 在 Java servletcontainer 上运行 PHP?

      【讨论】:

        猜你喜欢
        • 2013-04-12
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        • 2016-05-19
        • 2010-11-11
        相关资源
        最近更新 更多