PHP:基于MYSQL的会话在不同的机器上共享

时间:2010-08-23 11:55:48

标签: php session scalability distributed

我有一台应用程序位于机器A(solaris.example.com)上,相同的应用程序位于机器B(rhodes.example.com)上,这两台机器连接到同一个MYSQL数据库,该数据库上有会话表。 / p>

我已经实现了自己的会话处理程序,因此它保存到数据库而不是保存到文件中,这样可以正常工作。

我的问题是,如何从机器B访问机器A上创建的确切会话ID?

我在这两台机器的init脚本上都有这些设置:

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时,它会覆盖机器创建的值甲

问题是,如何告诉机器B使用机器A创建的会话ID并从表中获取数据?

我认为这是自动的,因为我打电话给session_set_cookie_params( 0, "/", ".example.com", false, false);

任何帮助都会很棒

2 个答案:

答案 0 :(得分:0)

我会尝试在用户的机器上保存一个cookie,以便我可以轻松确定他/她的会话是否存在。当然,如果用户禁用了cookie,这将无效。

您可以根据用户ip / etc存储某种有意义的数据,然后您可以根据此数据识别用户。注意:此解决方案仅在您可以准确识别用户时才起作用。否则,您可以向当前用户提供其他用户的会话。

编辑我在SO上找到link,也许会有所帮助。

答案 1 :(得分:0)

假设在客户端的URI中使用相同的主机名访问这两台计算机,您的方法没有明显的错误。

  

session_id($ _GET [“sessId”])

应尽可能避免{p> use_trans_id。 Cookie值仅出现在$ _REQUEST(取决于request_order ini设置)或$ _COOKIE中。

当然,如果他们在客户端使用不同的主机名,那么你需要自己填充会话ID - PHP可能不会为你做。

使用cookie是一种更明智的方法,可以大大简化事情。

您应该检查在机器A上创建的会话ID是否真的呈现给机器B(作为cookie或URL)。如果是,那么一些非常不寻常的事情正在发生。