簡體   English   中英

PHP會話文件的權限

[英]Permissions to PHP session files

我有一個域domain.com和subdomain sub.domain.com這兩個域具有不同的ftp用戶(user1,user2),它們屬於linux環境中的同一組(用戶組)。 最后,我有一個在兩個域上都使用會話的相同PHP應用程序(一個處於活動狀態,另一個處於測試環境)。

當我不首先訪問sub.domain.com而訪問domain.com時,當我不首先訪問domain.com而訪問sub.domain.com時,將在默認文件夾/ tmp /中創建具有適當權限600和user1:usergroup的PHP會話文件。 .com,將創建一個具有權限600和user2:usergroup的文件。

對於IE而言,所有功能都對所有瀏覽器都很有用(請不要專注於此)。 我發現的是,當我訪問sub.domain.com然后嘗試domain.com時,PHP嘗試讀取相同的會話文件,但沒有權限,並且頁面將無限期加載。 將文件所有權更改為user1可以使domain.com工作,但阻止sub.domain.com工作。

如何使Apache或PHP為會話創建不同的文件或使它們可從兩個域訪問。

PS就像我說的那樣,出於某種奇怪的原因,這種情況僅發生在IE上,而PHP的錯誤消息是:未捕獲的PHP錯誤:session_start()[function.session-start]:open(/ tmp / sess_t1 ...,O_RDWR)失敗:第46行第46行的文件xxx.php中的權限被拒絕(13)是session_start();

感謝您的任何建議。

不知道這是否是解決問題的最佳方法,但是您可以嘗試讓PHP將會話文件保存在每個域的不同目錄中。

看一下session_save_path()文檔。

請記住,必須在初始化會話之前進行設置。
理想情況下,這應該是腳本要做的第一件事。

我只是有同樣的問題。 Apache返回IE7和IE8的會話數據的方式似乎存在問題,但最有可能的原因是IE7和IE8用不正確的方式來聲明他們正在請求會話數據的域。

這是我的情況:

運行帶有兩個域的Apache 1.3,每個域都有自己的用戶帳戶:

Domain: mycompany.com 
Session path: /tmp/
Webserver user: mycompanycom

Domain: support.mycompany.com 
Session path: /tmp/
Webserver user: nobody

在Firefox / Safari / Chrome正常訪問期間,會發生以下情況:

  1. 我訪問mycompany.com,並在/tmp/創建了會話文件,該文件由用戶mycompanycom擁有。
  2. 然后,我訪問support.mycompany.com,並在/tmp/創建了第二個會話文件,該文件由用戶nobody擁有。
  3. Apache不會感到困惑,並且會返回正確的會話文件

但是,在訪問IE7和IE8時會發生以下情況:

  1. 我訪問mycompany.com,並在/tmp/創建了會話文件,該文件由用戶mycompanycom擁有。
  2. 然后,我訪問support.mycompany.com,而不是在/tmp/ nobody用戶創建第二個會話文件,而是由Apache嘗試返回mycompany.com的會話文件。
  3. mycompany.com的會話文件由用戶mycompanycom擁有,因此以用戶身份運行的Web服務器nobody無法訪問它。 權限被拒絕。

正如其他人所建議的那樣,該解決方案是在/tmp/創建一個單獨的目錄,以分隔存儲的用於support.mycompany.com的會話數據:

mkdir /tmp/mycompany
chown nobody:nobody /tmp/mycompany

然后,我將以下內容添加到根Web目錄中的support.mycompany.com的.htaccess文件中:

php_value session.save_path '/tmp/mycompany'

最后,我刪除了/tmp/所有現有會話數據,以確保新的會話路徑將立即使用:

rm -f /tmp/sess_*

就是這樣! 現在,IE7和IE8可以正常工作。

我相當確定這個問題與IE7和IE8如何從Apache請求會話數據有關。 他們可能首先向mycompany.com請求會話數據,然后向support.mycompany.com請求會話數據,即使后者是在地址欄中輸入的唯一域名。

您確定IE觸發了此問題嗎?

瀏覽器沒有直接訪問會話文件的權限,只有PHP(HTTPD)進程有權訪問會話文件。

我不明白為什么一個瀏覽器應該在PHP日志中給出與另一個瀏覽器不同的錯誤消息。

我認為您可能正在處理兩個單獨的問題。

一種解決方案是將其添加到每個子域的.htaccess文件中:

php_value session.save_path '/path/to/a/writeable/folder'

然后,確保每個子域都有權寫入其自己的文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM