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

时间:2011-02-10 13:15:49

标签: php session

我在PHP会话中遇到一个非常奇怪的问题,这是事实:

创建会话变量代码 - mydomain / a / b / c / create_session.php

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

读取会话变量读取mydomain / a / b / c / read_session.php

<?
    session_start();
    echo $_SESSION['test'];
?> 

问题

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

实施例

mydomain / a / b / c / read_session.php - 有效!

mydomain / a / b / read_session.php - 有效!

mydomain / a / read_session.php - 有效!

mydomain / read_session.php - 不起作用!

mydomain / d / read_session.php - 不起作用!

4 个答案:

答案 0 :(得分:1)

这可能不是问题。

域名必须完全相同(Cookie政策),这意味着http://www.domainhttp://domain

不同

答案 1 :(得分:1)

您可以尝试使用session_set_cookie_params,以防您的配置设置混乱:

session_set_cookie_params(0, '/');
session_start();

您可以将Cookie配置为仅在域上的某些路径上可用。这可能发生在这里。请注意,如果这是问题,解决问题的最佳方法是更改​​php.ini中的值:

session.cookie_path = "/"

答案 2 :(得分:0)

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

请务必检查session.cookie_paths。您的配置设置可能将cookie的路径设置为“/ a”。在这种情况下,您描述的功能会发生,因为路径不匹配。

答案 3 :(得分:0)

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

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

尝试将Cookie路径更改为/

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