无法访问不同服务器上的Session变量

时间:2013-04-24 11:51:23

标签: php apache memcached

我已经专门用一个服务器来维护Memcached和存储会话,这样我的所有服务器都可以毫无困难地在同一个会话上工作。

但不知怎的,我想我可能误解了Memcached关于PHP会话的可能性。

我认为我可以站在Apache 1 a.domain.com上并创建会话,例如$_SESSION['test'] = "This string is saved in the session"然后转到Apache 2 b.domain.comc.domain.com,只需继续会话并输入echo $_SESSION['test'];即可输出字符串。

它没有,但我确信如果你有多个网络服务器来共享同一个会话,我被告知memcached将是一个很好的工具。

我做错了什么?

enter image description here

顺便说一下。我们非常需要一个完整详细的教程或电子书来描述如何基于Memcached设置服务器,使用php,构建集群等。

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

session.save_path = "192.168.100.228:11211"

教程告诉我不要定义协议,并且已经为Apache 3 - memcached服务器提供了ip地址

这是phpinfo()的图像 enter image description here

session.cookie_domain中的域名不是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。 &GT;。&LT;

1 个答案:

答案 0 :(得分:2)

默认情况下(会话)Cookie是特定于域的,因此请在php.ini中设置cookie域

session.cookie_domain = ".domain.com"

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

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

其他要检查的事项:

会话在每台服务器上运行正常。

如果你使用的是大型代码库,特别是继承的/第三方的东西,可能会有一些东西覆盖它,请确保使用phpinfo()正确设置了会话处理程序。

如果您正在使用第三方代码 - 例如phpbb - 请检查cookie设置是否正确。

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