为什么会话的行为有所不同?
问题描述:
我用三个PHP文件为什么会话的行为有所不同?
Create.php
session_name('testing') ;
session_start() ;
if(isset($_SESSION['id']) && isset($_SESSION['name'])) {
header('Location: get.php') ;
die() ;
}
session_regenerate_id() ;
$_SESSION['id'] = '35' ;
$_SESSION['name'] = 'gaurav' ;
session_write_close() ;
Get.php
session_name('testing') ;
session_start() ;
if(!isset($_SESSION['id']) && !isset($_SESSION['name'])) {
header('Location: create.php') ;
die() ;
}
echo $_SESSION['id']," = ",$_SESSION['name'] ;
?>
<form action="close.php" method="post">
<input type="submit" value="Log out"></input>
</form>
close.php
session_name('testing') ;
session_start() ;
session_destroy() ;
当我处理create->get->close
是正确的,因为我关闭了会话,所以他们将没有会话可用,但是在关闭之后,我继续create.php,它在get.php中重定向到我,意味着有会话变量集。 但是当我去close.php get.php重定向到create.php这是正确的行为,但我不明白,关闭 - >创建一个重定向给我get.php。
第二个问题是,当我create.php在tmp文件夹中创建两个会话文件时,每次一个文件将空白,但第二个文件具有所有值。
答
你的问题可能是由于使用session_regenerate_id() ;
session_regenerate_id(中)将与新的替换当前的会话ID,并保持当前会话的信息。
这是取自http://php.net/manual/en/function.session-regenerate-id.php
我认为,既然你没有删除旧的会话,你会结束两个会话,只能销毁一个会话。这只是一个疯狂的猜测。
+0
谢谢,但这就是为什么我保证名称应该是相同的。如果不是session_start()新会话,则销毁fucntion销毁新的不旧的 – gaurav
在这里似乎至少有3个单独的问题......你可以重构这个问题作为1个问题吗? –
尝试在Create.php的第3行上做一个var_dump($ _ SESSION),看看它为什么会进入重定向,如果 – Michael
@TheOneandOnlyChemistryBlob他们正在使用相同的脚本 – gaurav