我需要根据数据库中给出的角色将用户重定向到不同的页面。只有用户名和密码才会在登录页面上提交。
它向我显示错误:您的登录会话数据未在数据库中记录。请帮我解决这个问题。
登录页面
<?php
session_start();
if(isset($_SESSION["admin"])){
header("location: index.php");
exit();
}
?>
<?php
if(isset($_POST["username"]) && isset($_POST["password"])){
$admin = preg_replace('#[^A-Za-z0-9]#i', '',$_POST["username"]);
$password = preg_replace('#[^A-Za-z0-9]#i', '',$_POST["password"]);
include"include/connect_to_mysql.php";// Connect to server and select databse.
$sql=mysql_query("SELECT * FROM admin WHERE username='$admin' AND password='$password' LIMIT 1");
$exitCount=mysql_num_rows($sql);
if($exitCount==1){
$row = mysql_fetch_array($sql);
$id = $row['id'];
$role = $row['user_role'];
if($role =='admin'){
$link = 'index.html';
}
elseif($role =='hsr'){
$link = 'http://www.google.com';
}
$_SESSION["id"] = $id;
$_SESSION["admin"] = $admin;
$_SESSION["password"] = $password;
$_SESSION["role"] = $role;
header("location: ".$link."");
exit();
}else {
echo "Wrong Username or Password";
}
}
?>
索引页
<?php
session_start();
if(!isset($_SESSION["admin"])){
header("location: login.php");
exit();
}
$adminID = preg_replace('#[^0-9]#i','',$_SESSION["id"]);
$admin = preg_replace('#[^A-Za-z0-9]#i', '',$_SESSION["admin"]);
$password = preg_replace('#[^A-Za-z0-9]#i', '',$_SESSION["password"]);
$role = preg_replace('#[^A-Za-z0-9]#i', '',$_SESSION["role"]);
include"include/connect_to_mysql.php";
$sql=mysql_query("SELECT * FROM admin WHERE id='$adminID' AND username='$admin' AND password='$password' LIMIT 1");
$exitCount=mysql_num_rows($sql);
if($exitCount==0){
echo "Your login session data is not on record in the database.";
exit();
}
?>
答案 0 :(得分:0)
代码看起来很好,很可能是查询结果的问题。我的建议是从查询开始逐步输出代码的值,直到找到问题所在的位置:
$query = "SELECT * FROM admin WHERE id='$adminID' AND username='$admin' AND password='$password' LIMIT 1";
echo 'Query: ' . $query;
exit;
这将告诉您查询是否正常并在数据库上运行它将确保用户存在给定条件。从那里,您可以看到它是数据问题还是数据库问题,并向前推进解决方案。
PS:如果您的数据库被曝光,那么以原始形式存储密码是不礼貌的。因此,可以考虑散列密码并比较登录时的哈希值。
PPS:在用户会话中存储太多数据总是不好的,id就足够了。而且在那里存储密码更加糟糕。
古德勒克。