2017-03-05 65 views
0

我無法理解我的場景中發生了什麼。無論是apache始終服務於第一個虛擬主機文件或php會話正在共享。apache是​​只提供一個應用程序還是共享PHP會話?

我試圖創造同一服務器上的DEV/QA環境中,我使用的Symfony2框架(謝天謝地PROD是一個獨立的,並且不受此)。我不使用Symfony前端控制器的原因是因爲我使用php deployer來部署垂直。我創建2個目錄:

/var/www/html/app1 /var/www/html/app2

和2個虛擬主機:

app.domain:80 points to app1 app.domain:8080 points to app2

和2個數據庫:

app_dev: blank app_qa: copy of prod

App1是我的DEV,我可以打破事情,我有完整的調試信息顯示。 App2是我的用戶測試的QA。

這裏是我重新啓動Apache後,我觀察行爲:

如果我瀏覽到DEV apache的重啓我看到DEV數據/代碼,一切工作正常後。現在,如果我打開QA(不管是在同一個瀏覽器還是另一個不同的瀏覽器),我仍然可以看到來自DEV的相同數據。現在,如果我再次重新啓動apache並首先瀏覽到QA,那麼這次我會看到來自QA的數據/代碼。如果我再打開DEV,它仍然是QA。

爲什麼是這種情況發生,我怎麼能避免這種情況。我不知道它是我的apache配置,還是因爲php會話正在兩臺主機之間共享。

虛擬主機配置:

應用1:80

DocumentRoot /var/www/html/app1/current/web 
ServerName app1.domain 
<Directory "/var/www/html/app1/current/web"> 
AllowOverride None 
     Require all granted 
     Allow from All 

     <IfModule mod_rewrite.c> 
      Options -MultiViews 
      RewriteEngine On 
      RewriteCond %{REQUEST_FILENAME} !-f 
      RewriteRule ^(.*)$ app.php [QSA,L] 
     </IfModule> 
</Directory> 

應用2:8080

DocumentRoot /var/www/html/app2/current/web 
ServerName app2.domain 
<Directory "/var/www/html/app2/current/web"> 
AllowOverride None 
     Require all granted 
     Allow from All 

     <IfModule mod_rewrite.c> 
      Options -MultiViews 
      RewriteEngine On 
      RewriteCond %{REQUEST_FILENAME} !-f 
      RewriteRule ^(.*)$ app.php [QSA,L] 
     </IfModule> 
</Directory> 

回答

0

通常情況下,當您打開使用session_start(),你會生成一個唯一的SESSION_ID到客戶端,如果他們之前沒有任何session_id。 session_id存儲在客戶端cookie中。默認情況下,PHP將會話數據存儲在文件中。

每個cookie值有不同的範圍。某些Cookie值可以跨子域共享,某些Cookie只能在指定的目錄上工作。

我懷疑你設定會話範圍遍及子域這樣app2.domain和app1.domain會議工作共享。

你可以change the scope of your session here

+0

如何使用不同的瀏覽器導致相同的行爲。那就是如果我用chrome打開app1,然後用Firefox打開app2,我會在兩個瀏覽器上看到app1。 –

+0

@JohntheRipper,所以你可以提供一些代碼。 – invisal

+0

在這種情況下,我不確定要提供什麼代碼。正如我所說我正在使用symfony2框架,它處理會話。這個問題可能與php共享會話或Apache配置的方式有關。我將通過製作幾個虛擬虛擬主機來測試一些測試,以瞭解內容的獲取方式。感謝 –

相關問題