2014-03-26 22 views
0

我有一个奇怪的问题,让我发疯... 我正在编写自己的MVC框架,我正在使用mysql的会话管理,当我发现session_regenerate_id函数有时从无处生成新的会话... 后几个小时试图猜测到底是什么可能是错误的,我结束了绕过我的所有代码,并与这个简单的PHP脚本运行一个白色的页面:session_regenerate_id正在执行... double?

<?php 
if(!isset($_SESSION)){ 
session_start(); 
$_SESSION['user']='kikko68'; 
$_SESSION['name']='cristian'; 
$_SESSION['mail']='[email protected]'; 
} 
$old=session_id(); 
session_regenerate_id(true); 
$new=session_id(); 
echo"OLD = ".$old."<br>NEW = ".$new; 
?> 

我一个网络上测试该脚本服务器,这是结果:

---------------load page--------------------- 
OLD = ffa4e90763d61a2f733364fddb86bbf4 
NEW = 7293a7268c77406075c78a38bc148c34 
---------------refresh----------------------- 
OLD = 7293a7268c77406075c78a38bc148c34 
NEW = d21e6da87635fb2934b286679850c830 
---------------refresh----------------------- 
OLD = d21e6da87635fb2934b286679850c830 
NEW = 9686e91f66565358bceaa4bac8d8a563 

正如您在每次刷新时所看到的那样,NEW ID变成了旧的一个。

在我本地安装而不是(XAMPP),事情似乎有什么意义......

---------------load page--------------------- 
OLD = c1vgleb55j0tpeu21mr3l1rip5 
NEW = dn2hfst79nuqtcegi91qikrv34 
---------------refresh----------------------- 
OLD = th1tk5dmaovdlrdka4frf07is0 
NEW = s7a990magimfccc0qtnl66rfp0 
---------------refresh----------------------- 
OLD = hkpadq4pjtbtcmap3m3322al21 
NEW = q17lh3asev8rkv3ld1f4mu2tk0 

有人能解释我为什么发生这种情况的原因吗? 谢谢。

回答

0

服务器结果对我有意义,而XAMPP结果不会。看起来在XAMPP环境中,旧会话永远不会被识别。所以session_start()创建一个全新的ID(ID变更#1),然后你的session_regenerate_id()调用创建一个新的ID(ID变更#2)。

要测试,请在session_start()后立即捕获会话ID。问题应该成为,而不是“为什么我的脚本中生成两个ID?”但“为什么我的脚本没有在session_start()上找到并加载有效的会话?”