PHP - setcookie(); не работает
Я сделал логин, который устанавливает cookie со значением вменяемого адреса электронной почты, поэтому в глобальном.php-файл, он хранит массив данных пользователей с помощью:
$email = $_COOKIE["PeopleHub"];
$getuserdata = mysqli_query($con, "SELECT * FROM Earth WHERE email='$email'");
$userdata = mysqli_fetch_array($getuserdata, MYSQLI_ASSOC);
cookie не устанавливается, я знаю это, потому что я сделал тестовый файл:
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>
4 ответов
вы должны установить cookies до все заголовки отправляются.
С руководство:
setcookie () определяет файл cookie для отправки вместе с остальными заголовками HTTP. Как и другие заголовки, куки должны быть отправлены до любого вывода из скрипта (это ограничение протокола). Это требует, чтобы вы размещали вызовы этой функции до любого вывода, включая и теги, а также любые пробел.
это означает, что вам нужно будет заглянуть в буферизация вывода если вы хотите использовать этот код как есть.
<?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 с BOM. Когда я перекодировал его как UTF-8 без BOM setcookie работал нормально, поэтому BOM был написан до того, как мой первый тег php был обнаружен. Я думаю, что включение буферизации в моем php.ini-файл, вероятно, тоже исправлю.
кто-то может в конечном итоге найти эту информацию полезной.
У меня была еще одна проблема с обновлением cookie с помощью функции setcookie.
поэтому я установил строку cookie из массива с помощью функции сериализации php. С этого момента я не смог обновить, что функция cookie - setcookie просто не работает, wheather устанавливает сериализованную строку или любую другую простую строку.
затем я установил другой файл cookie с новым ключом cookie, на этот раз данные были закодированы с помощью функции json_encode. На этот раз я смог установить cookie и обновите его: -)
У меня была такая же проблема и оказалось, что это было вызвано тем, что домен, который я проходил в функции другой порт (что не допускается).