最近我购买了一个 VDH 包,需要能够使用 $_SESSION 数组在子域之间进行通信。系统就是为此而构建的。我澄清说,在购买之前使用 VDH 服务是可以实现的,但他们并没有提供太多帮助来了解情况。
我做了很多研究,并遵循了给出的所有建议,但还是无法让它发挥作用。我有一个基本的测试设置,其中一个页面将设置会话变量,另一个子域将输出会话。目前的结果是会话数据丢失,但机器人测试页面上的会话 ID 相同。
所有域都在同一个盒子上。
测试文件一
$session_name = session_name("er435536311993");
session_set_cookie_params(0, '/', '.mysite.com.au');
@session_start();
$_SESSION['this_is_test'] = 'This was set in the sub domain';
echo '<pre>';
var_export($_SESSION);
echo 'done';
var_export(session_id());
测试文件二
$session_name = session_name("374WEaPW2me1392ZQWLM");
session_set_cookie_params(0, '/', '.whoadelaide.com.au');
@session_start();
echo '<pre>';
var_export($_SESSION);
var_export(session_id());
有些地方提到这可能是权限错误。我已经访问了 httpd.conf 文件,并将用户和组权限调整为相同,但数据仍然没有传递。
据我所知,所有域都访问存储会话日期的同一 tmp 空间。
支持人员提到我应该禁用 suPHP 和 Euexec 才能使其正常工作。这并没有改变结果。
我在网上找不到任何可以解决我的问题的方法。我尝试了所有可能的解决方案,从修改 PHP 代码到调整权限。
我尝试了人们提到的一些 shell 命令,但它们不起作用。shell 中的 CMD 不是我熟悉的东西。我设置了 Putty,并通过它尝试了一些操作。
有人有什么想法吗?我可以尝试什么吗?我的客户是
答案1
为什么要抑制 的错误session_start()
? 这正是错误最有可能出现的地方。
删除@符号并检查您的php错误日志。
此外,在第一次测试后,请在文件系统中找到会话文件,并将该文件的输出ls -l <session file>
和内容添加到您的问题中。如果这不能解决您的问题,请在第二次测试后执行相同的操作。
会话文件通常都在其中,/var/lib/php5/
但您的可能有所不同。如果没有,请检查您的 php.ini。
答案2
最后我找到了一个解决方案,而且它有效。我需要在 php 中禁用 suhosin。我甚至不知道 suhosin 是什么,但它有效。
添加
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off
在php.ini文件的最后对其进行了整理。