0

我已经整理了一个登录脚本,整理我的意思是我从论坛中复制并粘贴了一些代码片段,并通过反复试验使其正常工作。

到目前为止脚本工作正常,登录时根本没有问题,唯一的问题来自当您尝试登录而不填写任何字段时,它给了我一些奇怪的错误并将我重定向到一个空白页面

对象移动

该文件可以在这里找到

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

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

<?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();
}
?>
4

4 回答 4

1

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

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

if(isset($_POST['username']) && !empty($_POST['username']) && 
    isset($_POST['password']) && !empty($_POST['password']) ) { 
    //Do code here
}
else
{
   logIn(); 
}
于 2012-08-31T06:54:13.093 回答
0

当您比较要使用的字符串时,===!==

...
$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
}
于 2012-08-31T06:54:40.337 回答
-1

在尝试读取不存在的数组索引的密码和 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();
}
于 2012-08-31T07:30:32.677 回答
-1

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

于 2012-08-31T07:09:35.353 回答