如果两个网站使用相同的会话变量(它们共享我编写的相同代码)并且我在相同的浏览器中打开它们(在两个选项卡中),则SiteA的会话与SiteB的值混淆反之亦然。例如,如果我在SiteA中设置$_SESSION['var1']=1
,然后在同一浏览器中打开SiteB并执行array_dump($_SESSION)
,那么我会在转储中看到var1
。
如果一组会话变量只在一个站点的“范围”内,我该怎么办?
答案 0 :(得分:1)
我认为这些会话在同一个域下,并且都使用相同的会话cookie名称。使用session_name
更改此会话的名称(在您运行session_start
之前)。
答案 1 :(得分:0)
可能会在会话变量中添加一些前缀以区分其中一个吗?
<强> E.g。强>
siteA_loggedIn
siteB_loggedIn
答案 2 :(得分:0)
如果您在同一个域名上运行两个独立的站点,默认情况下它们确实会共享会话数据,但您可以更改它。会话cookie的名称在php.ini
中设置为session.name
指令(默认情况下为PHPSESSID
),但您可以使用session_name()
覆盖它。
您要做的是在一个网站SessionSiteA
上调用会话Cookie(请注意,会话名称为must be alphanumeric, and must contain at least one letter)。
所以你的选择是(a)每个站点有一个不同的php.ini
文件; (b)覆盖.htaccess
中的值(某些{但不是全部php.ini
设置允许这样做,目前我无法确定如何为session.name
执行此操作:可能不可能);或者(c)在设置或阅读任何会话之前调用其中一个站点中的session_name()
功能。请注意,session_name()
可以是computationally expensive,因此请谨慎使用(可能仅在其中一个网站上,让繁忙的网站使用默认的PHPSESSID
)。
注意:另一个选项可能是在不同的地方保存每个网站的会话,在每个网站上使用ini_set('session.save_path', ...)
的方式不同。如上所述,在设置或使用任何会话之前,必须集中完成。