SESSION变量在摧毁了其余的页面后不能从页面传递
我完全失去了单词。SESSION变量在摧毁了其余的页面后不能从页面传递
我允许管理员在过程中遇到错误时重置其注册。理论上,下面的代码应该像这样运行:
页面已到达,$ adminvalidated根据会话数据设置。 $ _SESSION数组被清除;在客户端清除cookie;会话标识被注入,会话被销毁。然后会话重新启动,并且之前提到的变量被放回到Session中。
下面包含的“echo”语句工作,但当我重定向到另一个页面(注释如下)时,会话变量不会继续。
是的我也开始了后续页面的会话。
<?php
session_start();
ob_start();
if($_SERVER['SERVER_PORT'] == 80) {
header('Location:https://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]);
die();
}
$adminvalidated = $_SESSION['ADMINVALIDATED'];
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_regenerate_id(true);
session_destroy();
session_start();
$_SESSION['ADMINVALIDATED'] = $adminvalidated;
echo $_SESSION['ADMINVALIDATED'];
/*
header("Location: ../a.php");
exit;*/
?>
通常,只需拨打session_regenerate_id(true)
即可更改当前会话和的会话ID,从而使与前一会话ID的关联无效。
如果您还想要清除除$_SESSION['ADMINVALIDATED']
任何会话数据,只是这样做:
session_regenerate_id(true);
$_SESSION = array(
'ADMINVALIDATED' => $_SESSION['ADMINVALIDATED']
);
From the manual page of session_start
:
自PHP 4.3.3,呼吁在session_start()会议后,先前启动将导致一个E_NOTICE级别的错误。另外,第二次会话开始将被忽略。
只需清除与session_unset
的会话,重新生成会话ID,然后重置您的管理变种。无需销毁,然后重新启动会话。
我真的不知道你为什么要经历所有这些步骤。 session_regenerate_id()足以自己重新生成会话标记和关联的cookie。该函数会创建一个新的会话标记并为您创建一个新的会话Cookie,同时保留当前会话中的值。由于设置一个新的cookie具有相同的名称覆盖旧的不是简单地调用session_regenerate_id()足够?
如果我错过了某些东西,随时澄清事情。
我不想在前几届会议中出现几个会话变量。您的回答对于预期目标不起作用 – JM4 2010-10-07 21:06:14
这不会导致错误。请使用上面的代码;有用。回声确实显示了我请求的数据;但是页面到页面不。 – JM4 2010-10-07 18:35:20
尝试添加:'error_reporting(-1);'到你的php文件的顶部,然后看看你是否能看到通知。您不需要销毁会话,只需清除所有当前变量,然后设置所需的任何新变量。 – rojoca 2010-10-07 18:39:19
感谢您的建议 - 我最初设计的方式,但听说它不是'傻瓜证明'session_destroy – JM4 2010-10-07 18:40:29