我在阅读了很多关于会话安全性的在线文章后写了一个PHP登录脚本。但是,我遇到了会话信息在页面之间不一致的问题。可能有一种行为与我使用的我忽略的方法之一有关,但我不完全是PHP或会话专家。在那里我有问题的代码是在被称为在每一页的head
会话启动功能:为什么我的PHP会话保持清除状态?
//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);
}
我使用的方法,我读到here。我唯一修改的是session_regenerate_id
删除旧会话,这是我想要的行为。但是,我得到意想不到的结果。分别
阵列()
阵列([session_init] => 1)
从每个print_r
:所述echo
我得到看起来像这样。所以每次调用该函数时,出于某种原因,我的知识都不清楚会话是空的,会导致它重新生成id并清除已经空的会话,然后设置session_init
。如果我刷新页面,session_init
仍应保存,但事实并非如此。这导致它再次做同样的事情。为什么是这样?我试过注释掉session_name
和session_set_cookie_params
,但它没有什么区别。
我在本地运行Apache 2.2服务器和PHP 5.3。
为什么要做'session_regenerate_id()'?至于PHP文档,这将“用新文件替换当前会话ID”。 – feeela 2012-07-26 17:03:20
你忘了句子的第二部分:'会用新的会话ID替换当前的会话ID,并保留当前的会话信息。' – alfasin 2012-07-26 17:17:19
我想摆脱它,所以任何拥有会话ID的人都必须得到它再次(如果黑客猜测它,或从客户端窃取它们,他们将不得不再次这样做,客户端将不得不再次登录)。我一直无法测试它,因为这不起作用... – smoth190 2012-07-29 22:11:18