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();
,因为它需要在所有使用会话的页面中。
我可以登录到我的页面,但是当我单击注销并在地址栏中输入 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();
,因为它需要在所有使用会话的页面中。