我已经专门用一个服务器来维护Memcached和存储会话,这样我的所有服务器都可以毫无困难地在同一个会话上工作。
但不知怎的,我想我可能误解了Memcached关于PHP会话的可能性。
我认为我可以站在Apache 1 a.domain.com
上并创建会话,例如$_SESSION['test'] = "This string is saved in the session"
然后转到Apache 2 b.domain.com
或c.domain.com
,只需继续会话并输入echo $_SESSION['test'];
即可输出字符串。
它没有,但我确信如果你有多个网络服务器来共享同一个会话,我被告知memcached将是一个很好的工具。
我做错了什么?
顺便说一下。我们非常需要一个完整详细的教程或电子书来描述如何基于Memcached设置服务器,使用php,构建集群等。
在我的php.ini文件中,它说:
session.save_path = "192.168.100.228:11211"
教程告诉我不要定义协议,并且已经为Apache 3
- memcached服务器提供了ip地址
这是phpinfo()的图像
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;
答案 0 :(得分:2)
默认情况下(会话)Cookie是特定于域的,因此请在php.ini中设置cookie域
session.cookie_domain = ".domain.com"
另见这里 Allow php sessions to carry over to subdomains
确保在进行更改后重新启动网络服务器并清除所有浏览器Cookie。如果您的cookie具有相同名称但不同的子域,则您的浏览器可能会感到困惑。
其他要检查的事项:
会话在每台服务器上运行正常。
如果你使用的是大型代码库,特别是继承的/第三方的东西,可能会有一些东西覆盖它,请确保使用phpinfo()正确设置了会话处理程序。
如果您正在使用第三方代码 - 例如phpbb - 请检查cookie设置是否正确。
(请注意这个答案整理,以消除头脑风暴,保留所有相关信息)