我有一个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变量返回就好了。
答案 0 :(得分:0)
$ _ 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 [, string $ domain [,bool $ secure = false [,bool $ httponly = false]]]] )
路径参数是您感兴趣的。如果您想要的话,请使用'/'作为整个域。
如果您不想每次都设置路径,而是一次性设置路径,请使用session.cookie_path
php.ini / .htaccess配置。
答案 1 :(得分:0)
尝试通过在session_start之后运行来显示会话cookie参数以确保它们正常:
var_dump(session_get_cookie_params());
如果路径(或域)与您的网络应用程序路径的前缀不匹配,那么您可能必须明确设置它:
session_set_cookie_params($expiretime, '/');
在调用session_start()之前,在每个脚本中