如何避免注销后在php中访问会话变量?

时间:2019-07-12 08:08:53

标签: php

我的网站上有一个配置文件页面,该页面使用会话变量欢迎用户使用其姓名。取消设置此变量后,页面仍可以访问该名称。我无法正确删除数据。

我尝试将其设置为null,session_unset和session_destroy

<?php @session_start(); ob_start(); ?>

//Some HTML code here

<?php
     if( isset($_SESSION["user"]) && $_SESSION["login"]) {
         echo '<div><p>welcome ' .$_SESSION["user"]. '!</p></div>';
         echo
              "<form action='' method='post'>
               <input type='submit' name='use_button' value='Log out' />
               </form>";
         if(isset($_POST['use_button'])) {
                $_SESSION["login"] = false;
                unset($_SESSION["user"]);
                session_unset();
                echo "logout successful."; 
                echo '<script>window.location.href = "same-page.php";</script>';
         } 
     }
     else
         echo 'no login data.';
     ?>

//Some HTML code here

<?php ob_end_flush(); ?>

我希望重定向之后,第一个if条件将不被满足,并且它给出的输出为“ no login data”,但它仍然可以访问会话变量。

外部php文件:

<?php
session_start();
$_SESSION["user"] = '' ;
$_SESSION["login"] = false ;
echo '<script>window.location.href = "../profile.php";</script>';
?>

3 个答案:

答案 0 :(得分:1)

我认为您可以通过使用session_destroy()方法破坏会话来做到这一点。

session_destroy()销毁与当前会话关联的所有数据。它不会取消设置与该会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。

您可以从session_destroy()

了解更多信息

答案 1 :(得分:0)

在这里,您要进行会话销毁,但是在销毁会话之前,也需要像下面这样从sessions数组中取消设置该特定变量。

unset($_SESSION['user']);

答案 2 :(得分:0)

在重定向行之后立即放置此行

echo '<script>window.location.href = "same-page.php";</script>'; // redirect
exit; // close current php script after redirect