我写了一个脚本,可以正确读取用户和密码数据,以登录到保留的网页。问题是,当你按下登录按钮时,它不会重定向到target.php(保留)页面。该表单位于一个名为login.php的文件中。它读取并连接到数据库,但停留在这个登录页面上:
<?php
session_start();
function loginform(){
echo "<form action='' method='POST'>
Username: <input type = 'text' name='username'>
Password: <input type = 'text' name='password'>
<input type = 'submit' name='login' value='Login'>
</form>
";
}
function logoutform(){
echo "<form action='' method='POST'>
<input type = 'submit' name='logout' value='Logout'>
</form>
";
}
function login($username, $password){
$pass = md5($password);
$con= mysqli(whateverwebsite.com, 'Nameofthetable', 'hashedmd5password') or die (mysql_error());
mysql_select_db('whateverdb', $con) or die (mysql_error());
$result = mysql_query(" SELECT * FROM user WHERE username='$username' AND password='$pass' ") or die (mysql_error);
$count= mysql_num_rows($result);
if($count==1) {
$_SESSION['login']=$username;
header('Location:target.php'); /* this does not work */
}
else {
header('Location:index.php'); /* this does not work */
echo "Wrong login";
}
}
function logout(){
session_destroy();
}
if (isset($_SESSION['login'])) {
echo "You've logged in";
logoutform();
}
else{
echo "Enter with Username and password.";
loginform();
}
if ($_POST['login']) {
echo "logging in..."; /* this text "logging in" remains on the screen, instead of going to target.php */
login($_POST['username'], $_POST['password']);
}
elseif($_POST['logout']){
echo "Logging out";
logout();
}
?>
此外,在target.php页面的html之前,还有这个
<?php
session_start();
echo "Reserved area<br>";
if (!isset($_SESSION['login'])) {
exit("you must login <a href='../login.php'>Login<a>");
}
else {
echo "Do the <a href='../login.php'>Logout</a>";
}
?>
这样的东西一直对我有效:
此修改在您的login
函数中。如果它有效,您可以以类似的方式修改else
部分。
if( $count == 1 )
{
$_SESSION['login'] = $username;
echo
'<!DOCTYPE html>
<html>
<head>
<title>Your website title</title>
<meta http-equiv="refresh" content="3;url=target.php">
<meta charset="UTF-8">
</head>
<body>
Logging in . Please wait ...
</body>
</html>';
}
在使用header()
之前,您不应该回显任何内容。
因此,首先检查$_POST['login']
,在login()
另一种方法:
<?php
echo "<script type='text/javascript'>window.location='page.php';</script>";
//or
echo "<meta http-equiv='refresh' content='0;url=page.php' />";
?>
您可以使用header()函数发送一个新的HTTP标头,但它必须在任何HTML或文本之前发送到浏览器(例如,在声明之前)。
备选方案:
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('http://www.google.com/', false);
更新:如果这不起作用,使用这个:
echo "<meta http-equiv='refresh' content='0;url=index.php' />";
而不是使用头
我认为这个函数可能是罪魁祸首。它没有显示任何内容,为什么它没有被调用?
if (isset($_SESSION['login'])) {
echo "You've logged in";
logoutform();
}
//在此处尝试
if($count==1) {
$_SESSION['login']=$username;
header('Location:target.php'); /* this will work now*/
//TRY
exit();
}
注意:mysql_*不推荐使用mysqli_您的代码极易受到攻击
逻辑缺陷-您的代码高度易受攻击
$result = mysql_query(" SELECT * FROM user WHERE username='$username' AND password='$pass' ") or die (mysql_error);
$count= mysql_num_rows($result);
让$username="A%"
像某些事情一样,让$count>1并登录到此是很容易的