php – 不能访问不同服务器上的会话变量

前端之家收集整理的这篇文章主要介绍了php – 不能访问不同服务器上的会话变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我专门为服务器维护Memcached和存储会话,所以我的所有服务器可以在同一个会话中工作没有困难.

但不知何故,我想我可能误解了Memcached对PHP会话的可能性的意义.

我以为我能够站在Apache 1 a.domain.com上,并创建一个会话,例如$_SESSION [‘test’] =“此字符串保存在会话中”,然后转到Apache 2 b.domain.com或c.domain.com,只需继续该会话并键入echo $_SESSION [‘test’];并输出该字符串.

它不是,但我确信,我被告知,如果您有多个网络服务器共享相同的会话,memcached将是一个伟大的工具.

我做错了什么?

顺便一提.我们认真地需要一个完整的教程或电子书来描述如何设置服务器,使用PHP,构建基于Memcached的集群等.

在我的PHP.ini文件中,它说:

session.save_path =“192.168.100.228:11211”

教程告诉我不要定义一个协议,并且ip地址已经被给予了Apache 3-memcached服务器

这是PHPinfo()的形象

session.cookie_domain中的域不称为域,但它是.local.
为此图像已更改.

编辑:

只是为了信息.当我使用简单的基于Memcached的PHP命令时 – 一切都很完美.但是不知何故当我尝试保存会话时,memcached服务器不存储该项目.

这样做:

<?PHP
$m = new Memcached();
$m->addServer('192.168.100.228',11211);

$m->set('int',99);
$m->set('string','a simple string');
$m->set('array',array(11,12));
/* expire 'object' key in 5 minutes */
$m->set('object',new stdclass,time() + 300);


var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));
?>

这不行

<?PHP
session_start();
$_SESSION['name'] = "This is a simple string.";
?>

编辑2:解决方

我注意到,在删除包括Cookie等的缓存历史记录之后,浏览器没有完成该作业.问题仍然存在,因为它挂在原来的个人会话ID上,这使得每个子域彼此分离.

这里定义的所有内容都是正确的,只要确定您的浏览器会重新设置Cookie. >.<

默认情况下(会话)cookie是域特定的,因此在您的PHP.ini中设置cookie域
session.cookie_domain = ".domain.com"

另见这里
Allow php sessions to carry over to subdomains

进行更改后,请确保重新启动网络服务器并清除所有浏览器Cookie.如果您的Cookie名称相同但子域不同,您的浏览器可能会感到困惑.

其他要检查的东西:

这些会话在每个单独的服务器上工作正常.

确保会话处理程序设置正确使用PHPinfo()如果你正在使用一个大的代码库,特别是继承/第三方的东西可能会有东西超越它.

如果您使用第三方代码(例如PHPbb),请检查Cookie设置是否正确.

(请注意,这个答案整理去除头脑风暴,保留所有相关信息)

猜你在找的PHP相关文章