0

如果两个网站使用相同的会话变量(它们共享我编写的相同代码)并且我在同一个浏览器中打开它们(在两个选项卡中),则 SiteA 的会话与 SiteB 的值混淆,反之亦然。例如,如果我$_SESSION['var1']=1在 SiteA 中设置,然后在同一浏览器中打开 SiteB 并执行array_dump($_SESSION)然后我var1在转储中看到。

我该怎么做才能让一组会话变量保持在一个站点的“范围”内?

4

3 回答 3

1

我想这些会话在同一个域下,并且都使用相同的会话 cookie 名称。session_name使用(在您运行之前)更改此会话的名称session_start

http://de1.php.net/manual/en/function.session-name.php

于 2012-11-27T14:27:50.180 回答
0

也许为您的会话变量添加一些前缀以区分另一个?

例如

siteA_loggedIn
siteB_loggedIn
于 2012-11-27T14:22:59.313 回答
0

如果您在同一个域名上运行两个单独的站点,则默认情况下它们确实会共享会话数据,但您可以更改它。会话 cookie 的名称设置php.inisession.name指令(默认情况下,它是PHPSESSID),但您可以用session_name().

您要做的是改为在一个站点上调用会话 cookie SessionSiteA(注意,会话名称必须是字母数字,并且必须至少包含一个字母)。

因此,您的选择是 (a)php.ini每个站点都有不同的文件;(b) 覆盖其中的值.htaccess(这对于某些但不是全部php.ini设置是允许的,我目前无法弄清楚如何做到这一点session.name:这可能是不可能的);或 (c)session_name()在设置或读取任何会话之前调用其中一个站点中的函数。请注意,它的计算成本session_name()可能很高,因此请谨慎使用(可能仅在其中一个站点上,让繁忙的站点使用默认值)。PHPSESSID

注意:另一个选项可能是将每个站点的会话保存在不同的位置,ini_set('session.save_path', ...)在每个站点上使用不同的方式。如上所述,这必须在设置或使用任何会话之前集中完成。

于 2012-11-27T14:26:09.413 回答