Я пытаюсь проверить, существует ли этот файл cookie, но он просто не работает при выполнении внутри панели навигации Bootstrap здесь. Эта панель навигации сохраняется отдельно как файл navbar.php и при необходимости загружается на другие страницы с помощью включения php.
Я попытался скопировать следующий код проверки файлов cookie в отдельный файл cookie.php, он работал с правильным выводом.
<?php
if (isset($_COOKIE["login"]))
{
echo "COOKIE TRUE";
}
else
{
echo "COOKIE FALSE";
}
?>
Итак, насколько я понимаю, что-то мешает проверке файлов cookie внутри этой панели навигации. Также я проверил этот файл cookie с помощью опции проверки браузера Chrome, и он отлично там. Это свежее печенье, срок годности которого не скоро истечет. Вот полный код navbar.php.
<nav class = "navbar sticky-top navbar-expand-lg navbar-dark bg-dark">
<a class = "navbar-brand" href = "http://example.com">
<img src = "http://example.com/static/logo.png" width = "75" height = "75" class = "d-inline-block align-top" alt = "">
</a>
<?php
if (isset($_COOKIE["login"]))
{
echo "COOKIE TRUE";
}
else
{
echo "COOKIE FALSE";
}
?>
</nav>
Я ожидал, что на странице будет отображаться COOKIE TRUE, но вместо этого внутри панели навигации Bootstrap всегда было COOKIE FALSE.
Поскольку вам нужно знать, где я установил этот файл cookie, вот код на моей странице логин.php. Включенный база данных.php имеет указанное местоположение базы данных, и этот код работает, и файл cookie создается каждый раз, когда я запрашиваю его об этом.
ОБНОВИТЬ: Спасибо @TheMouseMaster за указание на ошибки в коде входа. Я использую базу данных SQLite3 для этого входа в систему php, и я внес некоторые изменения.
<?php
include 'C:\inetpub\wwwroot\database.php';
if (isset($_POST['btnlogin']))
{
if ($db)
{
$login = $db->query('select email, password from users');
while ($row = $login->fetchArray())
{
$email=$row['email'];
$password=$row['password'];
if ($email==$_POST["txtemail"]&&$password==$_POST["txtpassword"])
{
setcookie("login", "true", time() + (86400 * 30), "/");
header("location: http://example.com");
}
else
{
header("location: http://example.com/register");
}
}
}
$db->close();
}
?>
@Andreas Андреас Я добавил информацию о том, где я установил этот файл cookie.
Если я правильно читаю ваш пример кода php, вы читаете всю таблицу базы данных «users» и ПЕРЕЗАПИСЫВАЕТЕ переменные $email и $password в каждой строке БД. ТОГДА И ТОЛЬКО ТОГДА вы проверяете, соответствует ли то, что находится в $email и $password, вашей попытке входа в систему. Это означает, что ваш файл cookie будет установлен правильно только в том случае, если имя пользователя и пароль, которые вы пытаетесь сопоставить, являются самыми последними в вашей таблице пользователей.
@TheMouseMaster Спасибо, что указали на это. Я внес некоторые изменения.






Где и как вы устанавливаете куки? Вы устанавливаете 4-й параметр?
http://php.net/manual/en/function.setcookie.php
Например:
setcookie("cookiename", "cookievalue", $time); Только для текущего пути URL
Лучший вариант: setcookie("cookiename","cookievalue", $time,"/"); Для всех страниц/папок в этом домене
Я добавил информацию о том, где я установил этот файл cookie.
Проблема была в том, как я включил navbar.php на каждой странице. Вместо того, чтобы загружать его с URL-адреса, например;
<?php include 'http://example.com/navbar.php';?>
Я заменил его на;
<?php include 'navbar.php';?>
или
<?php include '../navbar.php';?>
для страниц в подкаталогах, чтобы правильно подобрать его. Теперь это работает!
Спасибо!
Нам нужно увидеть, где вы установили файл cookie