PHP - скрипт выхода из системы не работает. Вход в систему, даже если переменная должна быть ложной - PullRequest
0 голосов
/ 09 апреля 2019

Мой php-код всегда остается в системе. Выход также не работает.Должна быть какая-то ошибка lidde, которую я не могу обнаружить.

Я повторил $ ​​_SESSION ['logged], и он всегда равен 1. Но $ _POST [' nam '] действительно пусто.Поэтому он не сохраняет данные при открытии сайта.Функция if для истинного имени входа также не разрешает true.

Прошу прощения за публикацию такого большого количества кода, но, возможно, это часть 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 голосов
/ 09 апреля 2019

Как вы видите, вы упаковываете весь скрипт в if ($_POST["send"]) оператор

Но в вашей форме $_POST["send"] будет существовать только в форме входа в систему, а не в форме выхода из системы.

0 голосов
/ 09 апреля 2019

В этом случае вы пропустили какую-то команду. Я исправил, как показано ниже. Сеанс не сохранит ничего после execute session_destroy.

<?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 }
?>
0 голосов
/ 09 апреля 2019

Единственный способ, которым это возможно, заключается в том, что if(isset($_POST['logout'])) { не оценивается как истинное.

Часть не выполняется.Я думаю, у вас нет $_POST['logout'], но $_GET['logout'] или внутри вашего <form> <input name='logout'> не имеет значения.

Это невозможно, дляпеременная, установленная на true, равную false прямо в следующей строке.

Существует очень небольшая вероятность возникновения состояния гонки, если вы используете сеансы, которые не заблокированы во времязапрос, который используется по умолчанию, когда вы используете HHVM вместо PHP, например - но я сомневаюсь, что в вашем случае.

...