【问题标题】:How to avoid accessing session variables in php after logout?注销后如何避免在php中访问会话变量?
【发布时间】:2019-07-12 08:08:53
【问题描述】:

我的网站中有一个个人资料页面,该页面使用会话变量以他/她的名字欢迎用户。取消设置此变量后,页面仍然可以访问该名称。我无法正确擦除数据。

我尝试将其设置为 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 条件不会得到满足,它会给出输出“无登录数据”,但它仍然可以访问会话变量。

外部php文件:

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

【问题讨论】:

  • 鉴于您问题中的代码,我无法解释为什么会话没有被清空。您确定这是该 PHP 脚本中的所有代码吗?或者,您是否尝试过仅包含此代码的脚本?
  • 是的,剩下的就是 HTML。
  • 您可以在session_unset() 之后尝试session_write_close()。以防万一 HTML 部分非常大。还要检查两个函数的结果,应该是true
  • session_write_close() 不起作用。两者的结果都是错误的。
  • “已解决:[…]” - 请不要将其放入问题中,而是写一个自我回答。 stackoverflow.com/help/self-answer

标签: php


【解决方案1】:

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

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

您可以通过session_destroy()了解更多信息

【讨论】:

    【解决方案2】:

    在这里您正在执行会话销毁,但您还需要在销毁会话之前从会话数组中取消设置该特定变量,如下所示。

    unset($_SESSION['user']);
    

    【讨论】:

      【解决方案3】:

      将此行放在重定向行之后

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-17
        • 2023-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 2015-05-02
        • 1970-01-01
        相关资源
        最近更新 更多