从不同路径访问PHP会话变量

从不同路径访问PHP会话变量,php,session,Php,Session,我在PHP会话中面临一个非常奇怪的问题,以下是事实: 创建会话变量代码-mydomain/a/b/c/create\u session.php <? session_start(); $_SESSION['test'] = "Hello World"; ?> <? session_start(); echo $_SESSION['test']; ?> 读取会话变量read mydomain/a/b/c/read\u session

我在PHP会话中面临一个非常奇怪的问题,以下是事实:

创建会话变量代码-mydomain/a/b/c/create\u session.php

<?
    session_start();
    $_SESSION['test'] = "Hello World";
?>
<?
    session_start();
    echo $_SESSION['test'];
?> 

读取会话变量read mydomain/a/b/c/read\u session.php

<?
    session_start();
    $_SESSION['test'] = "Hello World";
?>
<?
    session_start();
    echo $_SESSION['test'];
?> 

问题

当我从同一个URL中访问read_session.php代码时,它工作正常。 但是当我试图从不同的路径读取会话变量时,它不起作用

示例

mydomain/a/b/c/read_session.php-works

mydomain/a/b/read_session.php-works

mydomain/a/read_session.php-works

mydomain/read_session.php-不起作用


mydomain/d/read_session.php-不起作用这不可能是问题所在

域需要完全相同(cookie策略),这意味着与您可以尝试使用的不同,以防您的配置设置在某个地方弄乱了事情:

session_set_cookie_params(0, '/');
session_start();
您可以将Cookie配置为仅在域上的某些路径上可用。这很可能发生在这里。注意,如果这是一个问题,最好的解决方法是更改
php.ini
中的值:

session.cookie_path = "/"

正如Briedis所说,您可能没有使用相同的域。它们是一样的

一定要检查你的电脑。您的配置设置可能正在将cookie的路径设置为“/a”。在这种情况下,将出现您描述的功能,因为存在路径不匹配

Cookie(以及会话ID的Cookie)可以绑定到某些域和路径。PHP会话ID cookies的默认配置是将cookies绑定到当前域()和路径
/
()

您的会话配置可能与默认配置不同,因为cookie的路径被设置为
/a
,因此cookie仅在
/a
以及
/a
为正确路径前缀的路径中有效(即
/a/..

尝试将cookie路径更改为
/

ini_set('session.cookie_path', '/');

您正在哪个目录中启动会话(=设置cookie)?我的记忆在这个问题上是模糊的,但我认为如果你不指定路径,cookie将只对该路径和子目录有效。你检查过你的会话cookie实际对哪个路径有效吗?(试试Firefox+Web开发者插件)-我复制了您在我的本地主机上描述的内容,没有问题。会话cookie对整个域有效。(PHP5.3,默认设置)我正在使用ini_集('session.cookie_path','/');您好,Atli,“/a”虽然我使用的是ini_集('session.cookie_path','/'),但也许我也应该尝试将第四个参数setcookie()用于'/')。请在浏览器中签出会话id cookie并比较cookie路径。我添加了此行session_set_cookie_参数(0,'/');在会话_start()之前;就像你提到的那样,但不幸的是,这没有帮助。同样的问题也出现了。路径设置为“/”,正如我在Firefox的view Cookie扩展中看到的那样,但我现在也尝试了这个,但也没有任何帮助:(我可以在Cookie信息扩展中看到,即使我使用ini_set('session.Cookie_path','/'),路径设置为“/”)在脚本的开头。@Amir E.Habib:Hm,这很奇怪。请尝试使用
session\u set\u cookie\u params
代替:
$old=session\u get\u cookie\u params();session\u set\u cookie\u params($old['life','/');