为什么会话表现不同?

时间:2016-09-06 13:22:55

标签: php session

我正在使用三个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是正确的,因为我在关闭时销毁会话因此他们的会话没有会话可用但是在关闭后我继续使用get.php重定向到我的create.php意味着有会话变量集。 但是当我继续将close.php转到get.php,它重定向到create.php这是正确的行为,但我不明白close-&gt;创建一个重定向给我get.php。

第二个问题是,当我在tmp文件夹中创建两个会话文件时,每次一个文件为空,第二个文件为所有值时。

1 个答案:

答案 0 :(得分:0)

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

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