PHP:不同机器上基于MYSQL的会话共享
我在机器A(solaris.example.com)上有一个应用程序,在机器B(rhodes.example.com)上有相同的应用程序,这两台机器连接到同一个MYSQL数据库,数据库上有会话表 我已经实现了自己的会话处理程序,这样它就可以保存到数据库中,而不是保存到文件中,而且效果很好 我的问题是,如何从机器B访问在机器A上创建的确切会话ID 我在两台机器的init脚本上都有以下设置: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(
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
只是实际主机名的占位符,对吗?很抱歉,我没有时间做免费的代码评论,而且它也不能回答我建议你解决的问题。