Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:不同机器上基于MYSQL的会话共享_Php_Session_Scalability_Distributed - Fatal编程技术网

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

PHP:不同机器上基于MYSQL的会话共享,php,session,scalability,distributed,Php,Session,Scalability,Distributed,我在机器A(solaris.example.com)上有一个应用程序,在机器B(rhodes.example.com)上有相同的应用程序,这两台机器连接到同一个MYSQL数据库,数据库上有会话表 我已经实现了自己的会话处理程序,这样它就可以保存到数据库中,而不是保存到文件中,而且效果很好 我的问题是,如何从机器B访问在机器A上创建的确切会话ID 我在两台机器的init脚本上都有以下设置: ini_set("session.gc_maxlifetime", "288000"); ini_set(

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

我已经实现了自己的会话处理程序,这样它就可以保存到数据库中,而不是保存到文件中,而且效果很好

我的问题是,如何从机器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\u ID($\u GET[“sessiond]”)在机器B上设置会话ID时,
它覆盖了机器a创建的值

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

我认为这将是自动的,因为我调用了
session\u set\u cookie\u参数(0,“/”,“.example.com”,false,false)


任何帮助都会很棒

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

您可以根据用户ip/etc存储某种有意义的数据,然后根据这些数据识别用户。注意:只有当您能够准确识别用户时,此解决方案才有效。否则,您可以将其他用户的会话授予当前用户


编辑我在上面找到了一个,这样可能会有所帮助。

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

会话id($\u GET[“sessiond”])

应尽可能避免。Cookie值仅存在于$\u请求(取决于请求顺序ini设置)或$\u Cookie中

当然,如果他们在客户端使用不同的主机名,那么您需要自己填充会话id——PHP可能不会为您这样做

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


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

如何指定自定义会话保存处理程序?是否检查了正在创建的cookie?是否检查发送的cookie标头是否与要发送的cookie匹配?名称PHPSESSID值79c3dfa10e632ec2df7fb9a5240a2aad主机。example.com Path/Secure No在会话结束时过期,因此域是正确的。现在转到
rhodes.example.com
并检查发送的cookie头(例如,通过Firebug的网络面板),看看是否与正确的cookie匹配。@El Leonard:
example.com
只是实际主机名的占位符,对吗?很抱歉,我没有时间做免费的代码评论,而且它也不能回答我建议你解决的问题。