【发布时间】:2011-04-02 14:42:22
【问题描述】:
我有一个应用程序位于机器 A (solaris.example.com) 上,相同的应用程序位于机器 B (rhodes.example.com) 上,这两台机器连接到同一个 MYSQL 数据库,上面有会话表。
我已经实现了我自己的会话处理程序,所以它保存到数据库而不是保存到文件中,这工作正常。
我的问题是,如何从机器 B 访问在机器 A 上创建的确切会话 ID?
我在两台机器的初始化脚本上都有这些设置:
ini_set("session.gc_maxlifetime", "288000");
ini_set("session.cookie_lifetime", "288000");
ini_set("session.save_handler", "user");
session_set_cookie_params( 0, "/", ".example.com", false, false);
session_cache_expire(288000);
我遇到的问题是机器 B 不断在表上创建一个新会话,当我尝试使用 session_id( $_GET["sessId"] ) 在机器 B 上设置会话 ID 时,它覆盖了机器 A 创建的值。
问题是,我如何告诉机器 B 使用机器 A 创建的会话 ID 并从表中获取数据?
我认为这将是自动的,因为我已经调用了session_set_cookie_params( 0, "/", ".example.com", false, false);
任何帮助都会很棒
【问题讨论】:
-
如何指定自定义会话保存处理程序?
-
您是否按照您的需要检查了正在创建的 cookie?您是否检查了发送的 cookie 标头是否与您要发送的 cookie 匹配?
-
名称 PHPSESSID 值 79c3dfa10e632ec2df7fb9a5240a2aad 主机 .example.com 路径/安全在会话结束时不会过期
-
所以域是正确的。现在转到
rhodes.example.com并检查发送的 cookie 标头(例如,通过 Firebug 的网络面板),看看它是否与正确的 cookie 匹配。 -
@El Leonard:
example.com只是实际主机名的占位符,对吧?
标签: php session scalability distributed