0

我做了这个查找用户 ID 的小功能,并且我在整个网站上都可以使用该 ID,因为我之前包含了它<head>

$result=mysql_query("SELECT ID FROM korisnici WHERE username='".$_COOKIE["user"]."' AND password='".$_COOKIE["pass"]."'");
$get=mysql_fetch_assoc($result);
$ID_KORISNIK=$get["ID"];
if(empty($ID_KORISNIK))
{
    echo '
        <script>window.location="IDerror.php";</script>
        ';
}

所以当我想选择或插入数据库时​​,我可以使用

$r=mysql_query("SELECT * FROM uzg WHERE IDkorisnik='$ID_KORISNIK'");

或使用 JOIN

$r=mysql_query("SELECT * FROM uzg JOIN (uzg.IDkorisnik=korisnici.ID) WHERE korisnici.username='$_COOKIE["user"]' AND korisnici.password='$_COOKIE["pass"]'");

你觉得哪个更好或更有效?

4

2 回答 2

1
  1. 不要将密码存储为 cookie
  2. 永远不要相信用户输入,您的查询会受到 SQL 注入攻击
  3. 不要使用mysql_*函数,使用 PDO 或mysqli_*,并使用准备好的语句来防止 SQL 注入攻击

我建议学习准备好的语句,并使用PDOMySQLi——这篇文章将帮助你决定哪一个。如果您选择 PDO,这里有一个很好的教程

顺便说一句,我认为你的第一个解决方案更好(但你必须纠正很多东西)

于 2013-03-28T18:00:58.137 回答
1

如果它是大型项目,我很想使用一个用户类,所以我会简单地调用它

$new_user->id;

但如果不是,你的第一种方法要好得多,但你不是先检查你的输入是否是有效的 ID,一旦你确认它是一个有效的 ID [可能是现有的 int] 然后使用你的第一种方法

并存储您的用户密码,即使散列很糟糕,因为散列很容易破解,所以如果您想验证 cookie 窃取,请放置一些其他散列

于 2013-03-28T18:12:40.913 回答