在子域名之间传递 PHP $_SESSION 中的变量

在子域名之间传递 PHP $_SESSION 中的变量

最近我购买了一个 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文件的最后对其进行了整理。

相关内容