【问题标题】:$_SESSION variables are not accessible within a file$_SESSION 变量在文件中不可访问
【发布时间】:2013-12-01 13:04:48
【问题描述】:

我有一个 Web 服务器,其中包含一个包含用户 ID 的特定 $_SESSION 变量集。我有一个特定的文件(可能是一个目录),我似乎无法访问其中的这个会话变量。我的结构看起来像:

/root/[this is where I set my session variable].php

/root/subdirectory/[this is where the file is].php

在你问之前,是的,我在需要这个变量的每个页面的顶部使用session_start()。现在,我尝试了 var_dump-ing $_SESSION,它返回了一个空数组。但是这个变量似乎在其他任何地方都可以访问。什么可能导致这种情况?可能是文件权限吗?还是 $_SESSION 变量只能在目录中访问?

谢谢。

附加信息:

这里有些奇怪:所以我遇到的问题只发生在一个文件(比如 index.php)从第二个文件(无论出于何种原因无法访问 $_SESSION var ),但是当我手动转到文件时(即将 URL 放在我的网络浏览器中),$_SESSION 变量返回就好了。

【问题讨论】:

  • “所以我遇到的问题只有在文件(比如 index.php)从第二个文件运行脚本时才会发生”,那么如何从第二个文件运行脚本呢?请包含一些代码。

标签: php session web


【解决方案1】:

尝试在 session_start 之后运行显示会话 cookie 参数以确保它们正常:

var_dump(session_get_cookie_params());

如果路径(或域)与您的网络应用路径的前缀不匹配,那么您可能必须明确设置它:

session_set_cookie_params($expiretime, '/');

在调用 session_start() 之前的每个脚本中

【讨论】:

    【解决方案2】:

    $_SESSION 变量通常绑定到 HTTP 会话,该会话由设置给浏览器的会话 cookie 标识。如果您在设置会话 cookie 时使用了目录路径,则会话变量仅在该目录中可用。 HTTP 流量监控器会说明这一点。

    看看如何从http://php.net/manual/en/function.session-set-cookie-params.php配置路径:

    void session_set_cookie_params ( int $lifetime [, string $path [, 字符串 $domain [, bool $secure = false [, bool $httponly = false ]]]] )

    path 参数是你感兴趣的。如果你想要的话,对整个域使用“/”。

    如果你不想每次都设置路径,而是一劳永逸,请使用session.cookie_pathphp.ini/.htaccess 配置。

    【讨论】:

    • 返回的数组(5) { ["lifetime"]=> int(0) ["path"]=> string(1) "/" ["domain"]=> string(0 ) "" ["secure"]=> bool(false) ["httponly"]=> bool(false) }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多