对象在PHP登录脚本上移动了页面


Object Moved page on PHP login script

我已经编写了一个登录脚本,我所说的"编写"是指我从论坛中复制和粘贴了一些代码,并通过反复尝试使其正常工作。

到目前为止,脚本运行良好,登录时根本没有问题,唯一的问题来自于当你试图在没有填写任何字段的情况下登录时,它会给我一些奇怪的错误,并将我重定向到一个带有的空白页面

对象移动

这份文件可以在这里找到

这不是一个大问题,因为我不明白为什么人们会尝试使用空白字段登录,但我想知道如何解决这一问题,以供将来参考。

以下是我代码的登录部分:

<?php
session_start();
$data=array("user1"=>array("url"=>"page1.php","password"=>"12345"),
            "user2"=>array("url"=>"page2.php","password"=>"12345"),
        "user3"=>array("url"=>"page3.php","password"=>"12345")
        );
if(isset($_POST['username']) && isset($_POST['password'])) {
    $user = strtolower($_POST['username']);
    $pass = strtolower($_POST['password']);
    if($data[$user]['password'] == $pass) {     
       $_SESSION['username'] = $user . " " . $pass;
       header('Location: ' . $data[$user]['url']);
    } else {
        echo '<script type="text/javascript">window.onload = function() { document.getElementById("loginError").innerHTML = "' . "Invalid login details. Please try again." . '"; }</script>';
        logIn();
    }
} else {
    logIn();
}
?>

确保或更改`header('Location:'.$data[$user]['url']);重定向时是绝对路径,而不是相对路径。请参阅相关帖子作为我在IIS7上回答PHP的证明-接收";对象已移动";html页面,而不是实际重定向。

要修复空白密码问题,请将检查更改为以下内容:

if(isset($_POST['username']) && !empty($_POST['username']) && 
    isset($_POST['password']) && !empty($_POST['password']) ) { 
    //Do code here
}
else
{
   logIn(); 
}

比较要使用===!==:的字符串时

...
$user = strtolower(trim($_POST['username']));
$pass = strtolower(trim($_POST['password']));
if($user !== '' && $pass !== '') {
  //continue with login logic
  if($data[$user]['password'] === $pass) { 
  ...
}
else{
//print error
}

我认为没有定义logIn()函数。。。。请查收。如果还没有,请发布你的html代码。

在尝试读取不存在的数组索引的密码和URL之前,您应该检查用户名是否存在于数组中。

session_start();
$data=array("user1"=>array("url"=>"page1.php","password"=>"12345"),
            "user2"=>array("url"=>"page2.php","password"=>"12345"),
            "user3"=>array("url"=>"page3.php","password"=>"12345")
            );
if (!empty($_POST['username'] && !empty($_POST['password'])) {
    $user = strtolower($_POST['username']);
    $pass = strtolower($_POST['password']);
    if (isset($data[$user]) && $data[user]['password'] == $pass) {
        $_SESSION['username'] = $user . ' ' . $pass;
        header("Location: " . $daa[$user]['url']);
    } else {
        echo '<script type="text/javascript">window.onload = function() { document.getElementById("loginError").innerHTML = "' . "Invalid login details. Please try again." . '"; }</script>';
        logIn();
    }
} else {
    logIn();
}