在网上阅读了很多关于会话安全的内容后,我正在编写一个 PHP 登录脚本。但是,我遇到了一个问题,即页面之间的会话信息不一致。我正在使用的一种方法可能涉及我忽略的一种行为,但我并不完全是 PHP 或会话专家。我遇到问题的代码在head
每个页面中调用的会话启动函数中:
//Setup the session
session_name('CPI_SESSION');
session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : true), true);
//Start the session
session_start();
print_r($_SESSION);
echo '<br/>';
if(!isset($_SESSION['session_init']))
{
session_regenerate_id(true);
$_SESSION['session_init'] = true;
print_r($_SESSION);
}
我在这里读到的我正在使用的方法。我唯一修改的是session_regenerate_id
删除旧会话,这是我想要的行为。然而,我得到了意想不到的结果。我得到的echo
看起来像这样:
数组 ( )
数组 ( [session_init] => 1 )
从每一个print_r
分别。因此,每次调用该函数时,出于某种我不知道的原因会话是空的,这会导致它重新生成 id 并清除已经为空的会话,然后设置session_init
. 如果我刷新页面,session_init
应该仍然保存,但它不是。这会导致它再次做同样的事情。为什么是这样?我试过注释掉session_name
,session_set_cookie_params
但没有任何区别。
我使用 Apache 2.2 服务器和 PHP 5.3 在本地运行它。