我使用PHP7使用我最喜歡的控制方法啓動會話:URL路徑。這用於工作[我這樣做],但不適用於PHP7。我們從一個完全正常的hello world例子開始。使用/ action1/action2而不是使用action1 =&action2 =時Session_start無法讀取會話
<?php
session_start();
if(TRUE){
$_SESSION['test'] = 'Hello World!';
}
print_r($_SESSION);
echo "<P>".session_id();
用TRUE先運行它,這個寶寶完美地工作。將其設置爲FALSE,即可獲得您期望的結果。反覆運行它,你會得到相同的,預期的結果。我甚至可以訪問會話文件並查看變量已保存。
現在,我是使用域路徑控制我的代碼的粉絲。 E.G.,example.com/action1/action2。 Action1在我的.htaccess文件中被識別爲一個PHP類型的文件,我的doc_root有一個符號鏈接,action1 - > index.php。請注意,這在任何情況下都可以正常工作,但只有一個......當您將這些路徑添加到URI時,會話將停止讀取變量。
你能幫我理解爲什麼嗎?是的,這個問題的明顯解決方案是「當我這樣做時會感到痛苦,我該怎麼做?」是「不要那樣做」。但就像我說的,我是一個粉絲。坦率地說,這應該工作。唯一的cookie是正確的。 session_id()
報告說我正在查看相同的會話ID和文件。與數據填充的會話ID完全相同。正如我們所期望的那樣,刪除/ action1/action2組件並再次顯示$ _SESSION變量。
有誰知道爲什麼會發生這種情況?添加禁用會話的路徑是什麼?爲什麼只要PHP有預期的會話ID,它甚至會關心它?我甚至試圖file_get_contents()
這個會話文件,所以我可以session_decode()
的內容。沒有操作路徑,我可以讀取和處理文件。隨着行動路徑(鼓卷...),我甚至無法讀取文件。就好像發生了某種所有權變更,但我擁有文件和目錄權限。有任何想法嗎?
.htaccess:
RewriteEngine On
RewriteBase/
AddHandler application/x-httpd-php70 .php
<Files action1>
SetHandler application/x-httpd-php
</Files>
編輯:如果你想自己測試。將第一個文件保存到test.php
,然後如圖所示更新.htaccess文件。最後,ln -s test.php action1
。運行domain.com/test.php
向您證明會話正在運行。然後運行domain.com/action1
並觀察變量消失。
會話文件上可能存在鎖定,因此無法打開它。它不能是權限。此外,您可以啓用日誌記錄到最高級別,並檢查是否可以在日誌中找到更多信息。 – hakre
我將'display_errors'設置爲'E_ALL',我一直在'/ var/logs'文件中查找。我真的很茫然。 – JBH
而當您打開會話文件失敗時,您看不到任何警告? – hakre