我是PHP的新手。我的登录页面有问题。当我在本地服务器(localhost)上运行代码时,一切正常。但由于我在hostgator上传代码,我无法登录我的帐户。 我猜它与hostgator服务器的会话问题。
这是我想在hosgator上运行的代码
<?php
session_start();
require_once("functions.php");
require_once("db-const.php");
if (logged_in() == true) {
redirect_to("home.php");
}
?>
<html>
<head>
<title>Login</title>
<link rel="shortcut icon" href="images/WST.png" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="css/login.css" />
<span><img src="images/WST LOGO.png" width="290" height="115"></span>
</head>
<body>
<div class="login">
<h1><font size=5px; color="#030724";>Lo</font><font size=5px; color="#ffd700";>g</font><font size=5px; color="#d10b0b";>in</font></h1>
<!-- The HTML login form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="username" class="textbox" placeholder="Email" />
<input type="password" name="password" class="textbox" placeholder="Password" />
<input type="submit" name="submit" value="Login" /><br />
<input type="checkbox" name="remember" />Keep me logged in<br/><br/>
<a href="forgot.php">Forgot Password?</a> |
<a href="register.php">Sign Up</a>
</form>
<?php
if (isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// processing remember me option and setting cookie with long expiry date
if (isset($_POST['remember'])) {
session_set_cookie_params('604800'); //one week (value in seconds)
session_regenerate_id(true);
}
$encrypt_password=md5($password);
$sql = "SELECT * from users WHERE username ='{$username}' AND password ='{$encrypt_password}' LIMIT 1";
$result = $mysqli->query($sql);
if ($result->num_rows != 1) {
echo "<p><font color='red';>Invalid username or password!</font></p>";
} else {
// Authenticated, set session variables
$user = $result->fetch_array();
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
// update status to online
$timestamp = time();
$sql = "UPDATE users SET status={$timestamp} WHERE id={$_SESSION['user_id']}";
$result = $mysqli->query($sql);
redirect_to("home.php?id={$_SESSION['user_id']}");
// do stuffs
}
}
if(isset($_GET['msg'])) {
echo "<p style='color:red;'>".$_GET['msg']."</p>";
}
?>
</div>
</body>
</html>
请某人帮助我。
提前感谢:)
答案 0 :(得分:1)
这里有很多问题。我希望这不应该是一个生产应用程序或背后有任何安全的东西。
最初你使用的是LIKE。 LIKE允许模式,所以如果有人输入了用户名%,它就会匹配每一个用户名,所以你基本上只进行密码检查,这只是因为你在密码上使用了md5。
$username = $_POST['username'];
$sql = "SELECT * from users WHERE username ='$username' password ='$encrypt_password' LIMIT 1";
此代码允许SQL注入攻击,该攻击可能允许黑客操纵或破坏您的数据库。查找准备好的语句并使用它们。切勿在标准查询中使用用户输入(POST / GET / COOKIE)。
WHERE username ='$username' password ='$encrypt_password'
您在用户名和密码之间缺少AND。
如果您正在使用它来学习,那么很好,如果您正在尝试在生产中运行某些东西,您需要雇用某人来帮助您纠正/保护您的代码。
确保显示所有错误可能会有所帮助,请将此代码添加到PHP的顶部:
ini_set("display_errors", "1");
error_reporting(E_ALL);