IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Почему не работает setcookie?

Здравствуйте. Есть форма авторизации.

<form action="" method="POST">
      <div class="textbox">
          <input type="text" name="login" placeholder="Логин" >
      </div>
  <div class="textbox">
    <input type="password" name="password" placeholder="Пароль">
  </div>

  <input class="btn" type="submit" name="submit" value="Войти">
  </div>
</form>


Далее PHP поверка

<?php
if (isset($_POST['submit'])) {
  $user = $_POST['login'];
  $password = $_POST['password'];

  $user1 = trim($user);
  $user2 = stripslashes($user1);
  $user3 = strip_tags($user2);
  $user = htmlspecialchars($user3);

  $password1 = trim($password);
  $password2 = stripslashes($password1);
  $password3 = strip_tags($password2);
  $password = htmlspecialchars($password3);

  if (strlen($user) < 3) {
    echo "<script>alert('Короткий логин');</script>";
  }

  if (strlen($password) < 5) {
    echo "<script>alert('Короткий пароль');</script>";
  }

  $auth = mysqli_query($connect, "SELECT * FROM `users` WHERE `login` = '$user' AND `password` = '$password'");
  $result = mysqli_fetch_assoc($auth);
  if (count($result) == 0) {
    echo "<script>alert('Пользователь не найден');</script>";
  }
}
 ?>


Для того, чтобы сделать куки я после переменной if count поставил else.

if (count($result) == 0) {
    echo "<script>alert('Пользователь не найден');</script>";
  } else {
    setcookie('user', $user['login'], time() + 3600 * 24 * 7, "/");
  }


Но была ошибка, тогда я переместил строчку setcookie в самое начало файла. При правильных данных ошибки не было, но куки не отображалось.

<?php
if ($_COOKIE['user'] == '') {
  echo "Нет";
} else {
  echo "Есть";
}
 ?>


В тоже время поместив в начало print_r($_COOKIE); вывелась строка
Array
(
    [PHPSESSID] => цифры
)


Подскажите пожалуйста, в чём проблема?
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
1. Куки не поставятся, если уже был вывод (теги, пустые строки, пробелы, текст и т.п.)
2. В глобальную переменную $_COOKIE они попадут только на следующем хите (после перезагрузки страницы)
Пруф

PS и почитайте про sql-инъекции...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы