【发布时间】:2014-01-04 00:42:14
【问题描述】:
我需要为我网站上的各个目录存储单独的 cookie。我已经阅读了几篇关于如何实现这一点的文章,但我无法获得任何适合我的解决方案。我在每一页上执行这些行之一(COOKIE_PATH = '/city_dir/'):
session_set_cookie_params($lifetimeSeconds, COOKIE_PATH);
或
session_save_path(COOKIE_PATH);
接着是:
if (isset($_COOKIE['PHPSESSID'])){
$data = $_COOKIE['PHPSESSID'];
$timeout = time() + $lifetimeSeconds;
session_start();
setcookie('PHPSESSID', $data, $timeout);
}
else {
session_start();
}
session_regenerate_id(true);
第一行 (session_set_cookie_params) 听起来像是正确的解决方案,但是当我使用该行时,Chrome 网络开发人员工具列表中根本没有显示任何 cookie,并且我无法登录该站点。
第二行听起来不像是正确的解决方案(似乎我应该处理 cookie 路径,而不是保存路径),但它更接近了。第一次加载页面时,我看到路径“/”的 cookie。如果我刷新页面,该 cookie 仍然存在,并且为路径 COOKIE_PATH 列出了一个 cookie。不幸的是,我仍然无法登录。整个周末我搜索并尝试了许多变体,但无法正常工作。我错过了什么?我正在使用 PHP 版本 5.3.18。
【问题讨论】:
-
session_save_path()与cookies无关;它设置存储东西的服务器目录。其实在
session_set_cookie_params()之后我也看不懂你的代码的相关性。问题很可能是:1)COOKIE_PATH包含无效路径(您没有说清楚,但建议您省略前导斜杠)2)您还在站点根目录中使用会话 -
session_set_cookie_params应该可以工作。我有一个工作实现,完全符合您的描述。仔细检查你的假设。会话开始了吗?您是否看到正在服务器上创建会话?你有会话 cookie 吗? -
如果您有父路径的会话 cookie,有时浏览器会显示奇怪的行为;他们会发送错误的cookie。清除您的 cookie 以确保您没有遇到此问题。
-
@Frits van Campen
session_set_cookie_params现在正在工作,但只有在我添加session_name($cookieName)之后才能调用它。谢谢指点。
标签: php cookies session-storage