在子域之間傳遞 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不是我熟悉的東西。我已經設置了膩子,並且厭倦了一些事情。
有沒有人有任何想法?有什麼我可以嘗試的嗎?我的客戶是
最後我找到了一個解決方案並且它奏效了。我需要在 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。