Php

在子域之間傳遞 PHP $_SESSION 中的變數

  • May 23, 2012

最近我購買了一個 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不是我熟悉的東西。我已經設置了膩子,並且厭倦了一些事情。

有沒有人有任何想法?有什麼我可以嘗試的嗎?我的客戶是

最後我找到了一個解決方案並且它奏效了。我需要在 php.ini 中禁用 suhosin。我什至不確定 suhosin 是什麼,但它確實有效。

添加

suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off

在 php.ini 文件的末尾將其整理出來。

你為什麼要抑制錯誤session_start()?這正是錯誤可能出現的地方。

刪除 @ 符號並檢查您的 php 錯誤日誌。

此外,在第一次測試之後,在您的文件系統中找到會話文件,並將該文件的輸出ls -l <session file>和內容添加到您的問題中。如果這不能解決您的問題,請在第二次測試後執行相同操作。

會話文件通常在其中,/var/lib/php5/但您的可能會有所不同。如果不存在,請檢查您的 php.ini。

引用自:https://serverfault.com/questions/391277