【问题标题】:Can not log out correctly PHP无法正确注销 PHP
【发布时间】:2015-08-01 22:28:50
【问题描述】:

我可以登录并访问所有会员页面,但是当我退出时,我仍然可以访问所有会员页面

我使用此代码退出:

$_SESSION["admin_id"] = false;
$_SESSION["username"] = null;
redirect_to("login.php");

这段代码用于检查用户是否登录,

function logged_in() {
    return isset($_SESSION["admin_id"]);
}

function confirm_logged_in($page) {
    if (!logged_in()) {
        redirect_to($page);
    }
}

在我使用注销代码后,他会重定向我。但我仍然可以输入会员页面 URL 并像登录一样访问它们。我使用其他网络浏览器这是不可能的,因此页面受到正确保护。还是我需要彻底销毁 cookie 和会话?

【问题讨论】:

  • redirect_to() 包含/做什么?您是否正在取消/销毁会话,并且会话是否已在使用会话的所有页面中启动?
  • 当变量值为false时,它仍然存在,isset()返回true
  • redirect_to 只是重定向的功能,但我添加了一个函数以使其更短
  • 你已经在下面得到了答案,问他们或接受答案。

标签: php logout


【解决方案1】:

代替:

$_SESSION["admin_id"] = false;

试试这个:

unset($_SESSION["admin_id"]);

【讨论】:

    【解决方案2】:

    如果您确实需要注销,我认为您最好的选择是使用简单的 session_destroy() 使会话无效。 通过这样做,您可以使用 isset() 函数毫无问题地检查 $_SESSION,因为属于旧会话的每个参数都已取消设置。

    【讨论】:

      【解决方案3】:

      这是您注销时正在执行的操作。

      您正在设置 admin_idfalse(这在技术上是一个值)。

      $_SESSION["admin_id"] = false;
      

      然后检查admin_id 是否设置:

      isset($_SESSION['admin_id');  // returns TRUE because it "IS SET" to false
      

      选项

      您可以检查admin_id 是否不为空(处理nullfalse0)。

      function logged_in() {
          return ! empty($_SESSION["admin_id"]);
      }
      

      您可以扩展您当前的功能。

      function logged_in() {
          return isset($_SESSION["admin_id"] && $_SESSION["admin_id"] !== false);
      }
      

      您可以将变量设置为空。

      $_SESSION['admin_id'] = null;
      

      您可以完全销毁会话。

      session_destroy();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 2016-01-02
        相关资源
        最近更新 更多