创建了多个PHP会话,但仅限于Web服务器

时间:2013-11-28 13:14:35

标签: php wordpress session rackspace

我遇到只在我的测试服务器上发生的PHP会话问题(我的localhost上的一切正常)。我正在开发基于Roots的自定义Wordpress主题。我的localhost是OS X(PHP 5.4.4),测试服务器是Ubuntu(5.3.10-1ubuntu3.8)。

问题包括:

  • 每次刷新页面时都会创建新会话(我可以通过在页脚中呈现session_id()并查看/var/lib/php5/session)来查看
  • 通过AJAX请求调用的函数无法访问正确的会话,即使session_name()session_start()在尝试之前被调用

其他详情:

我正在尝试将变量保存到命名会话中,因此每次调用session_start()时我都会这样做:

session_name('my_session'); //Not sure if this line strictly required
if (!session_id()) {
    session_name('my_session');
    session_start();
}

首先在函数init_sessions中调用上面的函数,将其挂钩到Wordpress中:add_action('init', 'init_sessions');,然后还用于需要访问会话变量的其他文件(例如通过AJAX请求的那些文件)。

在localhost上,我可以看到在/Applications/MAMP/tmp/php中创建的会话文件,并且还会在Firebug的Cookies选项卡下看到一个会话。但是在我的测试服务器上,虽然/var/lib/php5/session中创建了(太多)会话文件,但我看不到会话出现在Firebug中。

运行phpinfo()并未显示我的localhost上的PHP指令与测试服务器上的PHP指令之间存在任何显着差异。

测试服务器实际上是两台(Rackspace)服务器,带有负载均衡器,但我不认为这是一个问题,因为会话持久性已经建立。

测试服务器设置为子域,例如test.my-domain.com。

我已启用PHP错误报告但未发现任何问题。

我已停用所有其他Wordpress插件。

我确信我的脚本比Rackspace的设置更容易出问题,但我现在有点难过。我特别好奇为什么我可以在/var/lib/php5/session中看到在测试服务器上创建的会话文件,但是看不到它们出现在Firebug的Cookies选项卡中。

任何想法都非常受欢迎。谢谢!

1 个答案:

答案 0 :(得分:0)

好的 - 我想我已经确定了发生了什么(虽然尚未解决)。看起来好像问题归咎于清漆。当用户登录时,会话功能完美。感谢所有建议修复的人。