限制用户访问网页+用户名/密码错误警报

  • 本文关键字:用户 密码 错误 访问 网页 php
  • 更新时间 :
  • 英文 :


我使用的是php,但没有数据库。

当我使用错误的用户名/密码登录时,它会显示"用户名/密码不正确",这是正确的。

但是,当我在未登录的情况下访问其他网页时,它还会显示"用户名/密码不正确",而不是"您必须登录才能访问此页面"。

<?php
$username = "admin";
$password = "its30305";
session_start();
if(isset($_SESSION['username])){
echo "<h1>Welcome ".$_SESSION['username]."</h1>";
}
else{
if($_POST['username] == $username && $_POST['password'] == $password){
$_SESSION['username] = $username;
echo "<script>location.href='mainmenu.php'</script>;
}
elif($_POST['username] != $username || $_POST['password'] != $password){
echo "<script>alert('Username/Password incorrect!')</script>";
echo "<script>location.href='login.php'</script>;
}
elif(!isset($_SESSION['access]){
echo "<script>alert('You must log in to access this page')</script>";
echo "<script>location.href='login.php'</script>;
}

?>

您不应该这样验证登录,但如果您想了解问题,检查这一行:

else if(!isset($_SESSION['access']){

在$_POST之前检查$_SESSION['access'],你就不会再有这个问题了:

if(!isset($_SESSION['access']){
//Need login to access this page
}else if($_POST['username'] == $username && $_POST['password'] == $password){
//Wrong username or password
}else if ...

我强烈建议更改您的代码结构:

使用PHP转发而不是JavaScript转发

如果您想在用户没有登录页面的权限时转发到登录页面,请使用header,如下所示:

header('location: /login.php');
die();

使用die()exit()转发后,始终终止当前脚本。

在使用$_POST密钥前检查是否已设置

确保$_POST在之前设置,例如:

isset($_POST['username']) && $_POST['username'] == $username

不要在代码中存储原始密码

始终存储哈希密码,无论您是否使用数据库。如果你想知道你的密码哈希是什么,你可以用找到它

password_hash("its30305", PASSWORD_DEFAULT);

你可以在你的代码中使用它:

$username = 'admin';
$password = '$2y$10$ZSCf.Nlma2mBrKetjqnEB.sdWcBiGJoByhPxwo9wCW8Nvz5Zc7Omm';  //Result of password_hash("its30305", PASSWORD_DEFAULT);

阅读password_hash

使用password_verify验证您的密码

您可以使用password_verify验证密码,如下所示:

isset($_POST['password']) && password_verify($_POST['password'],$password)

阅读password_verify。

在登录页面中显示正确的消息

如果你想向用户显示,你需要登录才能看到页面内容,你可以在header()之前设置一个$_SESSION['login_message'],并在登录页面中检查该会话。如果设置了,则在登录页面上显示正确的消息,然后取消设置会话。例如:

$_SESSION['login_message'] = 1; //user need to login to see the content
header('location: /login.php');
die();

在login.php上:

if (isset($_SESSION['login_message'])){
switch ($_SESSION['login_message']){
case 1:
echo 'Need to login to see the page.';
break;
case 2:
echo 'Wrong username or password.';
break;
}
//saw the message, not need it anymore!
unset($_SESSION['login_message']);
}

最新更新