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



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

我该怎么做才能让一组会话变量只停留在一个站点的"范围"内?

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

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

也许可以在会话变量中添加一些前缀来区分它们?

例如

siteA_loggedIn
siteB_loggedIn

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

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

因此,您的选择是(a)为每个站点提供不同的php.ini文件;(b) 覆盖.htaccess中的值(这是允许的,但不是所有的php.ini设置,我目前还不知道如何为session.name做到这一点:这可能不可能);或(c)在设置或读取任何会话之前调用其中一个站点中的CCD_ 15函数。请注意,session_name()在计算上可能很昂贵,因此请小心使用它(可能只在其中一个站点上使用,让繁忙的站点使用默认的PHPSESSID)。

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

最新更新