PHP 登录验证无效或注销无效

PHP login verification not working OR logout not working

我可以登录到我的页面,但是当我单击注销并在地址栏中输入 URL 时,它仍然允许我进入。这让我相信它没有正确验证我的凭据,因此无论如何都允许我进入。自从我使用 PHP 以来已经有一段时间了,所以我不是完全最新的,所以任何帮助将不胜感激。

需要登录才能访问的页面开头:

<?php session_start();
 if ($_SESSION['myusername'] !== 'myusername'){
 header("location:main_login.php");
 }
 ?>

我的checklogin.php:

if($count==1){

// Register $myusername, $mypassword and redirect to file "blogedit.php"
session_start();
 $_SESSION['myusername'] = $myusername;
 $_SESSION['mypassword'] = $mypassword;
 header("location:/blogedit.php");
 } else {
echo ("<SCRIPT LANGUAGE='JavaScript'>
window.alert('Username and password entered do not match. Please try     again.');
window.location.href='/main_login.php';
</SCRIPT>");
}

我的logout.php

<?php
session_start();
session_unset();  
session_destroy();
header("Location: /journal.php");
?>
if (!$_SESSION['myusername']= 'myusername') {
   # this will never be hit
}

您需要使用比较运算符。 = 不是比较运算符。 = 将尝试将左侧设置为等同于右侧。在这种情况下(使用字符串)这将始终成功。你应该使用 !==:

if (!isset($_SESSION['myusername']) or $_SESSION['myusername'] !== 'myusername') {
   # user not authenticated
}

正如 Fred 所说,$_SESSION['myusername'] 前面的 ! 您正在检查 $_SESSION['myusername'] 是否不为空(0,假,空),但您将其设置为等同于'myusername' 同传。这就是为什么永远不会命中 if 语句的内容。

您还必须在 checklogin.php 中包含 session_start();,因为它需要在所有使用会话的页面中。