我试图让我的头围绕PHP会话。session_regenerate_id()后删除的会话变量
我使用ShortPHP作为路由器,但ShortPHP代码不会触及会话。
模板具有session_start()
作为第一行: -
<?php
session_start();
include 's.php';
var_dump($_SESSION);
$sid = session_id();
echo $sid;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
此模板首先被执行的每一页(我已经添加了前几行(的var_dump等),以调试),其次是具体的页面代码。在这种情况下,我使用下面的代码: -
<?php
if (!defined('S')) die ("You've got no S"); // part of ShortPHP - irrelevant
if (!isset($_SESSION['login']) || $_SESSION['login'] != "1") {
echo "<p>Session is NOT set</p>";
//header() redirect to login here...
//exit();
}
$sri = session_regenerate_id();
var_dump($sri);
?>
如果我注释掉session_regenerate_id()
那么会话变量(login
)仍然是重新加载页面后可用,但启用session_regenerate_id()
,会话变量被删除当我重新加载页面。请注意0每次返回true
。
我甚至已经读取存储在服务器上的会话,原始会话的文件中包含会话变量数据,而在页面重新加载后,新会话文件没有变量(文件大小为零)。
我在这里做错了什么?
在重设ID和'session_regenerate_id()'返回之前,您是否有任何输出到浏览器? – jeroen
用您的问题的答案编辑问题:是和真 – garethTheRed
奇怪。如果您在发送标头之前使用'session_regenerate_id()'(输出发送到浏览器),它会有所帮助吗? – jeroen