我无法理解我的情景中发生的事情。 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后观察到的行为:
如果我在apache重启后浏览DEV,我会看到DEV的数据/代码,一切正常。现在,如果我打开QA(无论是在同一个浏览器还是其他不同的浏览器中),我仍然会看到来自DEV的相同数据。现在,如果我再次重新启动apache并首先浏览到QA,那么我会看到来自QA的数据/代码。如果我然后打开DEV它仍然是QA。
为什么会发生这种情况,我该如何防止这种情况发生。我不知道这是我的apache配置还是因为php会话是在两台主机之间共享的。
虚拟主机配置:
App1的: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>
App2的: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 :(得分:0)
通常,当您打开使用session_start()
时,如果之前没有任何session_id,您将为客户端生成唯一的session_id。 session_id存储在客户端cookie中。默认情况下,PHP将会话数据存储在文件中。
每个cookie值具有不同的范围。某些cookie值可以跨子域共享,某些cookie仅适用于指定目录。
我怀疑您将会话范围设置为跨子域工作,因此app2.domain和app1.domain会话是共享的。