我可以登录我的页面但是当我点击注销并在地址栏中输入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");
?>
答案 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();
,因为它必须位于使用会话的所有页面中。