Apache 别名是共享会话 [重复]

Apache aliases are sharing session [duplicate]

提问人:SheldonCopper 提问时间:11/14/2023 最后编辑:SheldonCopper 更新时间:11/15/2023 访问量:62

问:

我在 Ubuntu 22.04 上有 Apache2,带有 php 和 mysql。我创建了两个内部网站, site1 是 https://web.domain.cz,site2 与别名 https://web.domain.cz/second 位于同一虚拟主机中(这是第一个 Web 的某种管理)

这是我的虚拟主机配置

<VirtualHost *:443>
    ServerName web.domain.cz
    DocumentRoot /var/www/web

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/xxx.pem
    SSLCertificateKeyFile /etc/ssl/private/xxx.key

    <Directory /var/www/web>
        Require all granted
    </Directory>

    <Files dbh.php>
        Require all denied
    </Files>

    Alias /second /var/www/second
    <Directory /var/www/second>
       Require all granted
    </Directory>

</VirtualHost>
<VirtualHost *:80>
    ServerName web.domain.cz
    Redirect / https://web.domain.cz/
</VirtualHost>

疯狂的是,当我在一个网站上注销()时,我在第二个网站上注销。当我在一个网络上更改(相同的)会话变量时,它将在第二个上更改(例如,我在会话变量中存储了当前的排序顺序,如果我在一个网络上更改排序,它也会在第二个上更改)。session_destroy();

为什么会话变量是共享的,我可以用它做什么?

(我不使用任何PHP框架)

PHP Apache 会话

评论

0赞 Saud 11/14/2023
嗨,您所说的网络是指完全不同的浏览器还是同一浏览器的不同窗口?
0赞 SheldonCopper 11/14/2023
嗨,它们都是不同的网站。Site1 是,site2 是 。但是,是的,我在同一浏览器的不同选项卡上打开了它们。https://web.domain.czhttps://web.domain.cz/second
0赞 ADyson 11/14/2023
they are both different websites...从您的角度来看,是的,但从浏览器的角度来看,不是 - 只是看起来像同一域的子文件夹,因此它将使用相同的会话 cookie/second
1赞 Alex Howansky 11/14/2023
它们不是不同的站点。我建议将它们实际分离到不同的域,例如 web.domain.cz 和 admin.domain.cz,然后您将能够为每个域使用不同的 vhost 配置,并且您不必担心一个 PHP 应用程序是否可以通过目录遍历访问另一个应用程序的资产。
0赞 SheldonCopper 11/15/2023
如果我使用不同的虚拟主机,它们应该看起来像 和 ?然后,我必须有两条指向同一 IP 地址的 A 记录,而不是一条 DNS A 记录,对吧?<VirtualHost first.domain.cz:443><VirtualHost second.domain.cz:443>

答:

2赞 shingo 11/14/2023 #1

PHP 会话基于 cookie,默认情况下 cookie 按域保存,因为您的 2 个站点使用相同的域,因此它们共享相同的会话。

您可以通过提供信息来覆盖此行为,以便在会话开始时区分不同的站点,例如:

session_start([
    'cookie_path'=>'second'
]);