Unset()和session_destroy();

时间:2019-04-20 07:39:41

标签: php session

<?php session_start();
if(isset($_SESSION["user_name"]))
if($_GET["destroy"]=="yes")
{
unset($_SESSION["user_name"]);
session_destroy();
}

if(!isset($_SESSION["user_name"]) &&
$_GET["user"]!="")
$_SESSION["user_name"] = $_GET["user"];

?>
<html>
<head>
<title>Session Example</title>
</head>
<body>
Welcome <?php echo $_SESSION["user_name"]; ?>
<form action="#">
Input your name here: <input type=text name=user>
<input type=submit value=Submit>
</form>

<form action="#">
<input type=hidden value=yes name=destroy>
<input type=submit value="Destroy Previous Session">
</form>
</body>

</html>

在上面,有两行“ unset($ SESSION [“ username”]]); session_destroy();“当我删除” session_destroy();“时,其支付方式与之相同。是否没有必要?谁可以解释这一点,任何技巧都将不胜感激。

3 个答案:

答案 0 :(得分:1)

  

SecurityTokenValidated销毁指定的变量。

     

unset()销毁与当前会话相关的所有数据

有关更多详细信息,Unsetsession_destroy()

答案 1 :(得分:1)

session_destroy()破坏与当前会话关联的所有数据

取消设置会销毁特定的会话Cookie

但是php.net讲述了session_destroy():

  

注意:您不必从常规代码中调用session_destroy()。清理$ _SESSION数组,而不是破坏会话数据。

     

为了完全终止会话,还必须取消设置会话ID。如果使用cookie传播会话ID(默认行为),则必须删除会话cookie。 setcookie()可以用于此目的。

答案 2 :(得分:0)

我的理解是,如果您使用session_destroy(),则不必取消上面的会话文件。 Session_destroy()未设置  会话中的所有数据,包括$ _SESSION ['username']。

https://www.php.net/manual/en/function.session-destroy.php

在我看来,如果会话值仍然得到回显,则超出条件:

if(!isset($ _ SESSION [“ user_name”]])&& $ _GET [“ user”]!=“”)

没有被满足。根据上面的代码很难对其进行评估。