我有个奇怪的问题让我发疯..。我正在编写自己的MVC框架,并且正在使用mysql进行会话管理,这时我注意到session_regenerate_id函数有时会从任何地方生成新的会话.经过几个小时的尝试猜测到底是怎么回事,最后我绕过了所有的代码,用这个简单的php脚本运行了一个白页:。
<?php
if(!isset($_SESSION)){
session_start();
$_SESSION['user']='kikko68';
$_SESSION['name']='cristian';
$_SESSION['mail']='cri89@kij.com';
}
$old=session_id();
session_regenerate_id(true);
$new=session_id();
echo"OLD = ".$old."<br>NEW = ".$new;
?>我已经在一个web服务器上测试了这个脚本,结果是:
---------------load page---------------------
OLD = ffa4e90763d61a2f733364fddb86bbf4
NEW = 7293a7268c77406075c78a38bc148c34
---------------refresh-----------------------
OLD = 7293a7268c77406075c78a38bc148c34
NEW = d21e6da87635fb2934b286679850c830
---------------refresh-----------------------
OLD = d21e6da87635fb2934b286679850c830
NEW = 9686e91f66565358bceaa4bac8d8a563正如您在每次刷新时看到的那样,新id变成了旧id。
在我的本地安装(XAMPP)上,事情似乎有任何意义.
---------------load page---------------------
OLD = c1vgleb55j0tpeu21mr3l1rip5
NEW = dn2hfst79nuqtcegi91qikrv34
---------------refresh-----------------------
OLD = th1tk5dmaovdlrdka4frf07is0
NEW = s7a990magimfccc0qtnl66rfp0
---------------refresh-----------------------
OLD = hkpadq4pjtbtcmap3m3322al21
NEW = q17lh3asev8rkv3ld1f4mu2tk0有人能解释一下为什么会发生这种事吗?谢谢。
发布于 2014-12-07 12:08:07
服务器结果对我来说是有意义的,而XAMPP结果则没有意义。在XAMPP环境中,旧会话似乎根本无法被识别。因此,session_start()使用一个新ID (即ID更改#1)创建一个全新的ID,然后您的session_regenerate_id()调用创建另一个新ID(即ID更改#2)。
要进行测试,请在session_start()之后立即捕获会话ID。问题应该变成“为什么在我的脚本中生成两个in?”但是“为什么我的脚本没有在session_start()上找到和加载一个有效的会话?”
https://stackoverflow.com/questions/22665820
复制相似问题