我正在Apache上運行PHP/Yii應用程序。我試圖做到以下幾點:更改符號鏈接會破壞PHP會話
- 我的DocumentRoot是「www」,它是一個符號鏈接。將/ usr/local/src/releases/mysite-1/www目錄重命名爲/ usr/local/src/releases/mysite -2/WWW
- 我使用刪除舊符號鏈接的WWW:RM -f WWW
- 我創建一個使用一個新的符號鏈接:LN -s在/ usr/local/src目錄/發行/ mysite的-2/WWW萬維網
只是這樣做會導致PHP會話被銷燬,甚至沒有重新啓動Apache。有任何想法嗎?我檢查了我的PHP save_path,並且它不應該是一個問題,因爲我使用Redis進行會話處理。我的Apache配置是這樣的:
DocumentRoot "www"
<Directory "www">
Options -Indexes +FollowSymLinks
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
...
編輯: 我懷疑問題是與誼。經過一些進一步的測試後,它看起來不像會話數據實際上被破壞。我已經切換到基於文件的會話。這是我所看到的:
用戶登錄和會話ID設置爲tdv3l6jgf2sb1dnutt7updhfo1
會話數據的模樣:
陣列(5){ [「20b30da82f6dcc260a66f6a1044a5c3a_ ID 「] =>串(1) 」2「 [」 20b30da82f6dcc260a66f6a1044a5c3a _name 「] =>串(8) 」ewest FB「 [」 20b30da82f6dcc260a66f6a1044a5c3afbId 「] =>串(10) 」1028251971「 [」 20b30da82f6dcc260a6 6f6a1044a5c3aisFbUser「] => bool(true) [」20b30da82f6dcc260a66f6a1044a5c3a__states「] =>數組(3){ [」fbId「] => bool(true)[」isFbUser「] => bool(true)[」avatar「] => BOOL(真) } }
會話文件/ tmp下
創建我改變WWW符號鏈接,如上所述。會話ID保持不變,會話數據完好無損!但Yii :: app() - > user-> isGuest正在評估爲true。所以會議數據仍然存在,但Yii認爲我退出了!
Yii是否有另一個位置將用戶數據寫入? state.bin文件位於www外部的運行時目錄中。
在第一次看我不明白這到底是怎麼的,但做會議仍然會出現在Redis的步驟後, 2和3? – Fanis 2011-04-16 06:28:06
我認爲所有這些都與啓用allowAutoLogin綁定在一起。更改符號鏈接會導致Yii使用的Cookie ID丟失。它不會導致PHP會話丟失。 – Simian 2011-04-16 23:41:49
對於其他已登陸此處的用戶,在更改每個構建的文檔根目錄(而不是使用符號鏈接)時,我們遇到了類似的會話丟失問題。原因是'suhosin.session.cryptdocroot'標誌導致會話加密密鑰依賴於Documentroot字段 – Thomas 2015-06-09 01:08:29