首页 > 解决方案 > 如何从会话中注销?

问题描述

由于这种病毒在中国,老板娘让我们尝试在线上课。我希望学生登录,所以我知道谁在场。

登录工作。它检查用户名和密码。如果正确,我在。注销似乎很奇怪!

我在 logout.inc.html.php 下面有这个:

<form action="" method="post">
  <div>
    <input type="hidden" name="action" value="logout">
    <input type="hidden" name="goto" value="/">
    <input type="submit" value="Log out">
  </div>
</form>

当我把它放在任何页面上时显示一个很好的注销按钮:

<?php include $_SERVER['DOCUMENT_ROOT'] . '/includes/logout.inc.html.php';?>

当我单击按钮时,上面的表单确实将我带回了根页面,因此该位正在工作。但是,如果我再次单击 19BE1 类的按钮,我应该注销,我不会被要求再次登录。它只是打开。也许是一些饼干的东西??

这是 /includes/access19BE1.inc.php 的一部分 我从我的教科书 PHP & MySQL: Novice to Ninja 中得到这个

if (isset($_POST['action']) and $_POST['action'] == 'logout')
  {
    session_start();
    unset($_SESSION['loggedIn']);
    unset($_SESSION['name']);
    unset($_SESSION['password']);
    header('Location: ' . $_POST['goto']);
    exit();
  } 

它应该取消一切!我最终会超时吗?

我从stackoverflow得到这个,仍然没有注销!

if (isset($_POST['action']) and $_POST['action'] == 'logout')
  {
    //session_start();
    //unset($_SESSION['loggedIn']);
    //unset($_SESSION['name']);
    //unset($_SESSION['password']);
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
    header('Location: ' . $_POST['goto']);
    exit();
  }

请给这个病毒避免任何提示?

编辑: 我在 Firefox 中打开了一个私人窗口。我打开了本地主机。我得到我的网页。我单击 19BE1 类的按钮。我立即得到登录页面。我输入了错误的姓名和号码,这使我回到登录页面并显示错误消息。我输入正确的名称和密码,我得到我想要的页面。所以我认为登录是有效的。

也许,Firefox 正在保存一些东西?

标签: php

解决方案


如果您厌倦了session_start()注释掉行的 stackoverflow 答案,那session_destroy()将无法正常工作。

您可以尝试下面的简单代码,您可以根据自己的要求进行修改

<?php
session_start();
session_destroy();
header('location: index.php');
?>

推荐阅读