我问(并回答)这个问题主要是因为在我提到的任何其他类似的SO问题中找不到任何与我的具体情况完全相符的东西,我读过的任何一个问题都没有完全符合解决方案我找到。我希望将来这会使其他人受益。
我正在尝试设置一个非常有限的会话cookie,它只对我网站的管理部分有效,所以我正在使用session_set_cookie_params()这样做。这是原始代码:
// Set session parameters
$session_name = 'PGO_Admin';
$session_lifetime = 86400; // 24 hours, expressed in seconds
$session_cookie_path = './'; // This session is only valid within the confines of the admin folder
$session_cookie_domain = filter_input(INPUT_SERVER,'HTTP_HOST');
session_set_cookie_params($session_lifetime, $session_cookie_path, $session_cookie_domain);
session_name($session_name);
session_start();
此代码在Firefox中运行良好,但在IE和Chrome中失败。在Firefox中,如果我输入一些PHP代码来显示$ _SESSION的内容,我得到这个:
<!-- SESSION vars:
Array
(
[GitHubVersion] => 2.4.5
[poadmin] => Array
(
[curPage] => main
[uid] => 1
[name] => Dave
[lip] => 127.0.0.1
[prior_login] => Tuesday 9th of December 2014 03:11:56 PM
[ip] => 127.0.0.1
[last_login] => Tuesday 9th of December 2014 03:42:51 PM
[bot_id] => 1
[bot_name] => Test
[logged_in] => 1
)
)
-->
这是我期望看到的。但是,在IE或Chrome中,相同的代码只生成一个空数组:
<!-- SESSION vars:
Array
(
)
-->
如果我注释掉对session_set_cookie_params()的调用,那么脚本运行正常,但是设置的cookie可以在站点的任何地方访问,这对我来说是不可接受的。在我的头撞墙几个小时之后,我终于找到了一个非常简单的解决方案。请参阅我的答案以获得解决方案。
答案 0 :(得分:0)
这是我的理论:
似乎Firefox&#34;了解&#34;那&#39; ./'表示当前目录路径,而IE和Chrome则不表示。他们希望有一个完整的路径&#34;来自服务器的文档根目录,在我的情况下是&#34; / Program-O-master / admin /&#34;。有了这些知识,我按照以下方式修改了代码:
$session_name = 'PGO_Admin';
$session_lifetime = 86400; // 24 hours, expressed in seconds
$session_cookie_domain = 'http://' . filter_input(INPUT_SERVER,'HTTP_HOST');
$session_cookie_path = str_replace($session_cookie_domain, '', _ADMIN_URL_);
/* The constant _ADMIN_URL_ is set earlier, in a different file */
session_set_cookie_params($session_lifetime, $session_cookie_path, $session_cookie_domain);
session_name($session_name);
session_start();
这设定了&#34;适当的&#34; cookie路径,现在我测试过的所有浏览器(包括前面没有提到的几个)都按预期工作。我希望这将有助于其他人。