【发布时间】:2015-02-08 01:52:03
【问题描述】:
我问(并回答)这个问题主要是因为我在任何其他类似的 SO 问题中都找不到与我的具体情况完全匹配的东西,我读到的任何问题也没有完全符合我的解决方案成立。我希望这将在未来使其他人受益。
我正在尝试设置一个非常严格的会话 cookie,该 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 在站点内的任何地方都可以访问,这对我来说是不可接受的。在我的头撞墙几个小时后,我终于找到了一个非常简单的解决方案。请参阅我的答案以获得解决方案。
【问题讨论】:
标签: php google-chrome internet-explorer session firefox