PHP - 两个页面,两个会话,相同的值

时间:2012-11-27 14:20:23

标签: php session session-variables

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

如果一组会话变量只在一个站点的“范围”内,我该怎么办?

3 个答案:

答案 0 :(得分:1)

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

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

答案 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', ...)的方式不同。如上所述,在设置或使用任何会话之前,必须集中完成。