首页 > 解决方案 > PHP Cookie 检查在 Bootstrap 导航栏中不起作用

问题描述

我正在尝试检查此 cookie 是否存在,但在此处的 Bootstrap 导航栏中执行时它不起作用。此导航栏单独保存为navbar.php文件,并在需要时使用 php 包含加载到其他页面中。

我尝试将以下 cookie 检查代码复制到一个单独的cookie.php文件中,它与正确的输出一起使用。

<?php 
if (isset($_COOKIE["login"]))        
{
echo "COOKIE TRUE"; 
}
else
{
echo "COOKIE FALSE";    
}      
?>

所以根据我的理解,有些东西干扰了导航栏中的 cookie 检查。我还通过 Chrome 浏览器检查选项检查了这个 cookie,它就在那里。这是一个新鲜的饼干,不会很快过期。这是完整的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,所以这里是我login.php页面中的代码。包含的database.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();
}
?>

标签: phpbootstrap-4

解决方案


问题在于我在每个页面中包含navbar.php的方式。而不是从像这样的 URL 加载它;

<?php include 'http://example.com/navbar.php';?>

我已将其替换为;

<?php include 'navbar.php';?>

或者

<?php include '../navbar.php';?>

子目录中的页面以正确选择它。现在它起作用了!

谢谢!


推荐阅读