PHP登录验证无法正常工作或注销无法正常工作

时间:2015-01-23 15:22:45

标签: php login

我可以登录我的页面但是当我点击注销并在地址栏中输入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");
?>

1 个答案:

答案 0 :(得分:1)

if (!$_SESSION['myusername']= 'myusername') {
   # this will never be hit
}

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

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

正如弗雷德所说,!前面的$_SESSION['myusername']正在检查$_SESSION['myusername']是否为空(0,false,null),但是你将它设置为'myusername '在同一个过程中。这就是if语句的内容永远不会被命中的原因。

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