apache是​​仅为一个应用程序提供服务还是正在共享PHP会话?

时间:2017-03-05 02:00:04

标签: php apache symfony session

我无法理解我的情景中发生的事情。 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>

1 个答案:

答案 0 :(得分: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