【问题标题】:How to pass a session between tomcat and php如何在tomcat和php之间传递会话
【发布时间】:2010-11-30 09:46:58
【问题描述】:

嘿,我在一个 WTF 代码情况下工作在 jsp tomcat 服务器上,并试图将会话数据(用户 ID 等)传递给 php。我打算用session_set_save_handler() 重写 php 会话处理 我的问题是tomcat在哪里存储会话数据(硬盘?)以及它使用什么样的编码? 还是我走错了路? 我知道混合 php 和 jsp 的想法很愚蠢,我也很生气。

【问题讨论】:

  • :-o 只是出于好奇,谁问你这个?你的项目负责人?还是你的经理? :)
  • 我的项目负责人,是的,这是一个蹩脚的项目:(

标签: java php apache jsp tomcat


【解决方案1】:

尽量避免不同系统之间的会话。您不能真正在 PHP 和 Java 之间共享会话,因为,

  1. 它们在不同的进程下运行,也许是不同的机器。没有共享内存。
  2. 他们的会话数据结构完全不同。
  3. 序列化不兼容。
  4. 不同的 cookie 口味,“PHPSESSID”与“JSESSIONID”。

您几乎必须自己进行会话管理才能共享会话。这很复杂。以下是您必须编写的组件,

  1. 设置通用会话存储,如 DB 或 memcached。会话存储为大 blob。
  2. 设计一个通用的会话数据结构。我只使用名称-值对。两个系统上必须使用相同的名称,并且值必须是字符串 (UTF-8)。
  3. 使用通用序列化。我会使用 PHP 的 session_encode(),它在 Java 上相当容易处理。
  4. 处理您自己的会话 cookie。

【讨论】:

  • #3,您可以在两个系统上使用 json_en/decode() 序列化会话对象。
【解决方案2】:

我相信 Tomcat 的默认会话管理器会将会话数据存储在应用程序“工作”目录中的 SESSIONS.ser 文件中。

您可能想要创建和配置自己的会话管理器:http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html

【讨论】:

    【解决方案3】:

    您可以尝试使用数据库驱动的会话来解决此问题。假设 tomcat 和 apache 具有相同的会话哈希,是否可以跨服务器传输它们?您需要查看 tomcat 配置文件,它应该位于以 session 为前缀的内容下。那就是我要开始的地方。通常,在 Ubuntu linux 服务器上,它位于 /etc/apache2/apache2.conf 之类的目录下。

    我希望这会有所帮助,祝你好运!

    凯尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2018-09-28
      • 1970-01-01
      • 2013-06-30
      • 2021-06-12
      • 2016-03-26
      相关资源
      最近更新 更多