【发布时间】:2022-01-16 22:02:33
【问题描述】:
我制作了一个自定义登录脚本,它运行良好。但是,在它重定向到主页后,$_SESSION['username'] 的值会更改为 'root',无论它之前有什么值。其中“root”是我的数据库登录用户名。
我必须手动输入所有这些,所以它可能会出现一两个明显的错误-
main_login.php (php include_once on sidebar.php 包含在每个页面上)
<?php
if(!isset ($_SESSION["username"])){
?>
<!-- Simple login form action="checklogin.php" method="post"-->
<?php
}else{
?>
<!-- Table to display welcome user, and logout link -->
checklogin.php:
session_start();
$db_name = "database";
$tbl_name = "users";
mysql_connect("localhost","root","password") or die("Cannot connect to SQL server");
mysql_select_db("$db_name")or die("Cannot select database.");
$username = $_POST['username'];
$password = $_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$password = md5($password);
$sql = "SELECT * FROM $tbl_name WHERE username = '$username' and password = '$password'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count == 1){
$_SESSION["username"] = $username;
$_SESSION["password"] = $password;
header("location:login_success.php");
}
else{
echo "<script type='text/javascript'>\n";
echo "setTimeout('redirect();',2000);\n";
echo "function redirect(){\n";
echo "window.location = 'index.php';\n";
echo "}\n";
echo "</script>\n";
echo "Wrong Username or Password";
login_success.php:
<?php
session_start();
if(!isset($_SESSION['username'])){
header("location:index.php");
}else{
session_regenerate_id();
}
// Apply permissions - problem existed before all of this code
mysql_connect("localhost","root","password") or die("Cannot connect to database.");
mysql_select_db("database") or die("Cannot select database.");
$username = $_SESSION['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysql_num_rows($result);
mysql_close();
$_SESSION['username'] = mysql_result($result,0,'username');
$_SESSION['permissions'] = mysql_result($result,0,'permissions');
?>
<html>
<head>
<script type="text/javascripnt">
setTimeout("redirect();",4000);
function redirect(){
window.location = "index.php";
}
</script>
</head>
<body>
Login Successful.
<?php echo "Welcome ".$_SESSION["username"].".";
var_dump($_SESSION); // var_dump reveals that $_SESSION['username'] is still the login name.
?>
</body>
</html>
一旦它完成了整个过程,一切都很好。但是,当它重定向到 index.php 时,$_SESSION['username'] 现在是 'root'。
我想看看是否有人知道为什么会发生这种情况(这样我就可以理解这个问题并在将来防止它),以及一个要实施的修复。
谢谢大家。
【问题讨论】:
-
不需要剥离密码和 mysql_real_escape 密码,因为您只需创建它的 md5-hash。使用您的解决方案,对 stripslash 或 mysql_real_escape 的任何更改都可能会破坏您的登录
-
谢谢fender,我会改的。这是我第一次尝试 PHP ......永远不会猜到,是吧?
-
它已被修复 - 没有代码错误。虽然如果我对 SO 有更多的代表,我会给你们每个人 +1 以获得肯定会使用的重要信息。谢谢大家!!
-
实际上做stripslashes和mysql_real_escape_string没什么不好。你只需要了解在哪里使用它。 应该使用stripslashes。但有条件地,只有打开了magic_quotes_gpc 设置(但最好将其关闭)。 mysql_real_escape_string 也可以使用,但在它的位置。它是与数据库相关的函数,因此,它应该是最后 对进入查询的字符串变量所做的事情。请参阅我对主题的回答stackoverflow.com/questions/2993027/…