最近我购买了一个 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 和 Eueexec 以使其工作。这并没有改变结果。
我无法在网上的任何地方找到我的问题的解决方案。我已经尝试了所有可能的解决方案,从 PHP 代码的变化到调整权限。
我已经尝试了一些人们提到的 shell 命令,但它们没有用。shell 中的 CMD 不是我熟悉的东西。我已经设置了 Putty,并且已经厌倦了一些事情。
有没有人有任何想法?有什么我可以尝试的吗?我的客户是
你为什么要抑制错误
session_start()
?这正是错误可能出现的地方。删除 @ 符号并检查您的 php 错误日志。
此外,在第一次测试之后,在您的文件系统中找到会话文件,并将该文件的输出
ls -l <session file>
和内容添加到您的问题中。如果这不能解决您的问题,请在第二次测试后执行相同的操作。会话文件通常在,
/var/lib/php5/
但您的可能不同。如果不存在,请检查您的 php.ini。最后我找到了一个解决方案并且它奏效了。我需要在 php 中禁用 suhosin。我什至不确定 suhosin 是什么,但它确实有效。
添加
在 php.ini 文件的末尾将其整理出来。