session_destroy()+ session_start()不在标题重定向之后

时间:2014-06-14 13:19:24

标签: php session session-variables php-5.4

尝试在多页注册中临时存储信息。因为我不希望旧会话弄乱新的注册数据,我试图破坏旧会话。问题如下。

无效:

signup1.php

//Start new session
session_regenerate_id(TRUE);
session_destroy();
unset($_SESSION);
session_start();

//Store values in session
$_SESSION['created']    = time(); 

//Redirect to second step
header('Location: '.$settings->siteurl.'signup2.php');
exit();

signup2.php

<pre>
<?php 
    //Print $_SESSION (empty array)
    print_r($_SESSION); 
?>

工作(但返回旧的$ _SESSION值+更新值):

//Start new session
session_regenerate_id(TRUE);

//Store values in session
$_SESSION['created']    = time(); 

//Redirect to second step
header('Location: '.$settings->siteurl.'signup2.php');
exit();

什么可以解决问题?第一个session_start();在init.php中设置但如果我将它放在session_regenerate_id(TRUE)之上并不重要,则数组保持为空。

1 个答案:

答案 0 :(得分:1)

你应该首先使用它:

session_start(); // Starts a new or resumes an existing session

然后你可以使用:

session_regenerate_id(TRUE); // regenerates the active session id

TRUE/delete_old_session参数用于:

  

是否删除旧的关联会话文件。

session_regenerate_id对于防止会话劫持非常有用,它只是重新生成一个新的id,但会保留会话数据。这应该在用户的访问级别更改或使用时间间隔(即每10分钟后)但在重新生成另一个新的session id之前使用,您需要先启动会话。