PHP – setcookie (); не работает

Я сделал логин, который устанавливает cookie со значением вмененного адреса электронной почты, поэтому в файле global.php он хранит массив данных пользователей, используя:

$email = $_COOKIE["PeopleHub"]; $getuserdata = mysqli_query($con, "SELECT * FROM Earth WHERE email='$email'"); $userdata = mysqli_fetch_array($getuserdata, MYSQLI_ASSOC); 

Печенье не устанавливается, я знаю это, потому что я сделал тестовый файл:

 echo $_COOKIE["PeopleHub"]; 

Он просто сделал пустую страницу.

Код входа (где установлен файл cookie):

 <?php include "global.php"; ?> <h2>Login</h2> <?php echo "We currently have <b>" . $usercount . "</b> members, <b>" . $onlinecount . "</b> of which are online. "; ?> <br> <br> <?php if(isset($_POST["email"])){ $email = $_POST["email"]; $password = sha1($_POST["password"]); $check = mysqli_query($con, "SELECT * FROM Earth WHERE `email`='$email' AND `password`='$password'"); $check = mysqli_num_rows($check); if($check == 1){ setcookie("PeopleHub", $email, 0, '/'); echo "We logged you in!"; } else { echo "We couldn't log you in!"; } } ?> <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post"> Email <input name="email" placeholder="Email Address" required="" type="text"><br> Password <input name="password" placeholder="Password" required="" type="password"><br> <input type="reset" value="Start Over"> <input type="submit" value="Login"> </form> 

Solutions Collecting From Web of "PHP – setcookie (); не работает"

Вы должны установить файлы cookie перед отправкой любых заголовков.

Из руководства :

setcookie () определяет cookie для отправки вместе с остальными HTTP-заголовками. Как и другие заголовки, файлы cookie должны быть отправлены до выхода из вашего скрипта (это ограничение протокола). Это требует, чтобы вы отправляли вызовы этой функции до любого вывода, включая и теги, а также любые пробелы.

Это означает, что вам нужно будет искать буферизацию вывода, если вы хотите использовать этот код как есть.

 <?php ob_start(); echo "Hello\n"; setcookie("cookiename", "cookiedata"); ob_end_flush(); ?> 

В зависимости от содержимого global.php это может сработать для вас. Все, что я делал, это удалить любой выход до setcookie() . Если global.php содержит любые пробелы или HTML-выход, это не будет работать:

 <?php include "global.php"; if(isset($_POST["email"])){ $email = $_POST["email"]; $password = sha1($_POST["password"]); $check = mysqli_query($con, "SELECT * FROM Earth WHERE `email`='$email' AND `password`='$password'"); $check = mysqli_num_rows($check); if($check == 1){ setcookie("PeopleHub", $email, 0, '/'); echo "We logged you in!"; } else { echo "We couldn't log you in!"; } } ?> <h2>Login</h2> <?php echo "We currently have <b>" . $usercount . "</b> members, <b>" . $onlinecount . "</b> of which are online. "; ?> <br> <br> <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post"> Email <input name="email" placeholder="Email Address" required="" type="text"><br> Password <input name="password" placeholder="Password" required="" type="password"><br> <input type="reset" value="Start Over"> <input type="submit" value="Login"> </form> 

Просто хотел указать, у меня была проблема с setcookie, которая не работает. Когда я исследовал файл дальше, он был закодирован как UTF-8 с спецификацией. Когда я перекодировал его как UTF-8 без спецификации, setcookie работал нормально, поэтому спецификация была написана до того, как был встречен мой первый тег php. Я думаю, что включение буферизации в файл php.ini, вероятно, также исправит это.

Кто-то может в конечном итоге найти эту информацию полезной.

У меня была другая проблема с обновлением cookie с использованием функции setcookie.

Поэтому я установил строку cookie из массива, используя функцию сериализации php. С этого момента я не смог обновить этот файл cookie – функция setcookie просто не работала, поскольку устанавливала сериализованную строку или любую другую простую строку.

Затем я установил еще один файл cookie с новым ключом cookie, на этот раз данные были закодированы с помощью функции json_encode. На этот раз я смог установить cookie и обновить его 🙂

У меня была такая же проблема, и выяснилось, что она вызвана тем, что домен, который я передавал функции, имел собственный порт (который не разрешен).