请帮助我为我的登录会话提供以下php代码,但我试图获取$ _session ['user_id']而不是$ _session ['email']。我尝试使用print_f函数来查看我可以使用的内容,但是user_id数组表示0,除非我读错了,否则不能正确。
session_start();
$email = strip_tags($_POST['login']);
$pass = strip_tags($_POST['password']);
if ($email&&$password) {
$connect = mysql_connect("xammp","root"," ") or die (" ");
mysql_select_db("dbrun") or die ("db not found");
$query = mysql_query("SELECT email,pass FROM members WHERE login='$email'");
$numrows = mysql_num_rows($query);
if ($numrows!=0) {
// login code password check
while ($row = mysql_fetch_assoc($query)) {
$dbemail = $row['login'];
$dbpass = $row['password'];
}
// check to see if they match!
if ($login==$dbemail&&$password==$dbpass) {
echo "welcome <a href='member.php'>click to enter</a>";
$_SESSION['login']=$email;
} else {
echo (login_fail.php);
}
} else {
die ("user don't exist!");
}
//use if needed ==> echo $numrows;
} else {
die ("Please enter a valid login");
}
我试图获得$ _session ['user_id']而不是如何使用而不是$ _session ['email']。尝试使用$ _session ['user_id'],但我得到了未定义的错误信息。
答案 0 :(得分:1)
好吧,你没有在这个脚本的任何地方定义$ _session ['user_id'],所以没有定义它也就不足为奇了。您必须先为其指定一个值,然后才能引用它。
另请注意,此代码存在各种安全问题。
您以root用户身份运行MySQL连接。这不是一个好主意。
您信任用户输入,这会使您的脚本打开SQL注入攻击。从用户输入中删除HTML标记不会使其安全。假设我来到您的网站,并填写“email”字段:
bob@example.com'; GRANT ALL PRIVILEGES ON *.* TO 'evil_bob' IDENTIFIED BY '0wned_joo';
按照目前的说法,您的脚本会正常运行其查询,并创建一个名为“evil_bob”的帐户,该帐户具有服务器上所有数据库中所有信息的完全权限。
为避免这种情况,请勿假设用户输入是安全的。验证它。更确切地说,不要将变量直接插入到您编写的SQL中。请改用绑定参数。在某些情况下,很难避免 - 例如,如果您需要指定列的名称而不是一段数据,绑定参数将无济于事,您将不得不以其他方式执行此操作。但是,对于您在查询中使用的任何数据,请将其绑定。