2016-09-06 92 views
0

我用三个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文件夹中创建两个会话文件时,每次一个文件将空白,但第二个文件具有所有值。

+1

在这里似乎至少有3个单独的问题......你可以重构这个问题作为1个问题吗? –

+0

尝试在Create.php的第3行上做一个var_dump($ _ SESSION),看看它为什么会进入重定向,如果 – Michael

+0

@TheOneandOnlyChemistryBlob他们正在使用相同的脚本 – gaurav

回答

0

你的问题可能是由于使用
session_regenerate_id() ;

session_regenerate_id(中)将与新的替换当前的会话ID,并保持当前会话的信息。
这是取自http://php.net/manual/en/function.session-regenerate-id.php
我认为,既然你没有删除旧的会话,你会结束两个会话,只能销毁一个会话。这只是一个疯狂的猜测。

+0

谢谢,但这就是为什么我保证名称应该是相同的。如果不是session_start()新会话,则销毁fucntion销毁新的不旧的 – gaurav

相关问题