PHP登录验证不工作或注销不工作

PHP登录验证不工作或注销不工作,php,login,Php,Login,我可以登录到我的页面,但当我单击“注销”并在地址栏中键入URL时,它仍然允许我输入。这让我相信,它没有正确地验证我的凭证,因此允许我进入。我已经有一段时间没有使用PHP了,所以我不是完全最新的,所以任何帮助都将不胜感激 需要登录才能访问的页面的开头: <?php session_start(); if ($_SESSION['myusername'] !== 'myusername'){ header("location:main_login.php"); } ?> M

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

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

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

My 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>");
}
if($count==1){
//注册$myusername、$mypassword并重定向到文件“blogedit.php”
会话_start();
$\会话['myusername']=$myusername;
$\会话['mypassword']=$mypassword;
标题(“位置:/blogedit.php”);
}否则{
回声(“
window.alert('输入的用户名和密码不匹配。请重试');
window.location.href='/main_login.php';
");
}
My logout.php

<?php
session_start();
session_unset();  
session_destroy();
header("Location: /journal.php");
?>

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

if (!isset($_SESSION['myusername']) or $_SESSION['myusername'] !== 'myusername') {
   # user not authenticated
}
正如弗雷德所说,用
$\u会话['myusername']
前面,您正在检查
$\u会话['myusername']
是否为空(0,false,null),但您正在同一过程中将其设置为等同于“myusername”。这就是if语句的内容永远不会被命中的原因


您还必须包括
session_start()
inside checklogin.php,因为它必须位于使用会话的所有页面中。

session_start()内部checklogin.php?如果没有,请添加它。此
$\u会话['mypassword']=$mypassword是非常不鼓励的。听说过会话劫持吗?^特别是考虑到密码在会话中似乎没有任何用处。在此语句中,您到底想做什么:if(!$\u session['myusername']='myusername'){在我看来这是错误的。我认为应该是:if($\u session['myusername']='myusername')){@Fred ii-不是,我在哪里添加它有关系吗?事实上,我认为OP正在尝试检查它是否未设置。它没有使用正确的语法。@Devon,所以我添加了这些更改。现在,我根本无法访问页面,即使使用正确的登录信息或访问URL。我更新的代码在上面。如果(!isset),也可以执行
($_SESSION['myusername']){…}
如果(!isset($_SESSION['myusername'])&&$_SESSION['myusername']!='myusername')){…}
@Fred ii-
如果(!isset($_SESSION['myusername']){…}
这就是诀窍所在,非常感谢。如果你将此作为答案发布,我会接受吗?@user3758073没关系。让Devon将其包括在答案中。我很高兴我能提供帮助,干杯——一旦他这样做,你就可以接受了。
if (!isset($_SESSION['myusername']) or $_SESSION['myusername'] !== 'myusername') {
   # user not authenticated
}