PHP-注销脚本不起作用。登录,即使变量应该为false

时间:2019-04-09 11:36:20

标签: php session login session-variables session-state

我的php代码始终保持登录状态。注销也不起作用。我一定不能发现一些lidde错误。

我回应了$ _SESSION ['logged],它始终为1。 但是$ _POST ['nam']确实为空。因此,它在打开站点时不会保留数据。 真登录的if-funtion也不解析真。

很抱歉发布了这么多代码,但这也许是mySQL的一部分吗?

if(isset($_POST['send'])) {

mysqli_connect($servername,$dbuser,$dbpw,$db,$port); //DB-Conn succesfull

      $query  =   "SELECT * FROM `users` WHERE `name` LIKE '$user' AND `pw` LIKE '$pw'";
      $result =   mysqli_query($con,$query) or die(mysqli_error($connection));
      $rows   =   mysqli_fetch_assoc($result);
      if($_POST['name']==$rows['name']) {
          $_SESSION['logged']    =   true;
          echo "Not triggering, still logged in";
      }
      else { $_SESSION['logged']    =   false;}

      if(isset($_POST['logout'])) {
          $_SESSION = array();
          session_destroy();
          $_SESSION['logged'] = false;}

     echo $_SESSION['logged']; //This is always 1
  }

表格

          <?php     if($_SESSION['logged'] == false) {?>

                            <form method="post">
                                <input type="text" class="form-control" id="name" name="name" placeholder="abc">
                                <input type="password" class="form-control" id="pw" name="pw" placeholder="xyz">
                              <button type="submit" name="send">Login</button>
                            </form>        
            <?php ;}
            else {?>
                    <form method="post">
                      <button type="submit" id="logout" name="logout">Logout</button>
                    </form>

            <?php }
            ?>

3 个答案:

答案 0 :(得分:0)

唯一可行的方法是因为if(isset($_POST['logout'])) {的计算结果不为真。

该零件未执行。我猜您没有$_POST['logout'],但是$_GET['logout']中的<form> <input name='logout'>没有值。

不可能将设置为true的变量放在下一行的false处。

万一您使用在请求期间未锁定的会话,则发生争用情况的可能性非常小,例如,当您使用HHVM而不是PHP时,这是默认设置-但我怀疑这种情况。 / p>

答案 1 :(得分:0)

如您所见,您将整个脚本包装在if ($_POST["send"])语句中

但是在您的表单中,$_POST["send"]仅存在于登录表单中,而不存在于注销表单中。

答案 2 :(得分:0)

在这种情况下您错过了一些命令。我已作如下纠正。在执行session_destroy之后,Session将不保存任何内容。

<?php
if(!isset($_SESSION))
    session_start();
if (isset($_POST['send']))
{
    $rows['name']="Done";
    if ($_POST['name'] == $rows['name']) {
        $_SESSION['logged']    =   true;
        echo "Not triggering, still logged in <br/>";
    } else {
        $_SESSION['logged']    =   false;
    }
}

if (isset($_POST['logout'])) 
{
    $_SESSION = array();
    $_SESSION['logged'] = false;
    unset($_SESSION['logged']);
    session_destroy();
}
echo(isset($_SESSION['logged']) && ($_SESSION['logged']))? 'true' : 'false';
?>
<?php if(!isset($_SESSION['logged']) || !($_SESSION['logged'])) { ?>

    <form method="post" action="">
        <input type="text" class="form-control" id="name" name="name" placeholder="abc">
        <input type="password" class="form-control" id="pw" name="pw" placeholder="xyz">
        <button type="submit" name="send">Login</button>
    </form>
<?php
} else { ?>
    <form method="post" action="">
        <button type="submit" id="logout" name="logout">Logout</button>
    </form>
<?php }
?>
相关问题