繁体   English   中英

如何在php登录页面中使用多个标题

[英]How to use more than one header in a php login page

下面是我在 php 中的登录页面代码。

<?php
session_start();

if($_SERVER["REQUEST_METHOD"] == "POST") {
  // username and password sent from form 

  $myusername = $_POST['username'];
  $mypassword = $_POST['password']; 
  $f_password = md5($mypassword);

  $sql = "SELECT id,user_name FROM users WHERE user_name = '$myusername' and password = '$f_password'";
  $result = mysqli_query($db,$sql);
  $row = mysqli_fetch_assoc($result);

  $count = mysqli_num_rows($result);

  // If result matched $myusername and $mypassword, table row must be 1 row

  if($count == 1) {
      $_SESSION['us_name'] = $row['user_name'];
      header("Location: /main-page.php");
  }else {
     $error = "<script>alert('Incorrect Credentials.Please login again');</script>";
     echo $error;
  }
}
?>

当我在 else 块中使用另一个标头时,它会引发一些错误。 但我希望用户在输入错误凭据时重定向到相同的登录页面。 我怎样才能在 php 中做到这一点? 请不要告诉我使用js方法window.location。

首先回答您的问题:我假设错误来自发送数据 - 您在 else 块中所做的echo - 然后尝试添加标题。 您必须在发送第一个数据之前发送所有标头,其中包括使用echo打印内容。

如果您将header()行放在 else 块的开头,并确保之前没有其他输出(例如使用var_dump() ),您的问题应该会消失。

此外,您的脚本中还存在许多安全问题:

  • 您使用md5()对高度不安全的密码进行编码。 现代 php 有一个函数password_hash() (自 PHP 5.5 起可用),您应该使用它
  • 您的用户名和密码将在不过滤输入的情况下使用。 这让您面临 SQL 注入,因为它们在您的 SQL 查询中以不安全的方式重用。 您应该查看准备好的语句或至少过滤并引用用户输入

另一个与为什么需要标题相关的问题:如果要重定向到登录页面,为什么页面上有<script> -snippet? 更改位置时无论如何都不会影响,对吗?

最后一个问题,你的问题被标记为 laravel。 所以我很好奇你为什么不使用它的身份验证机制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM