gpt4 book ai didi

php - 我的 "remember me"-功能

转载 作者:行者123 更新时间:2023-11-29 09:20:23 25 4
gpt4 key购买 nike

终于让这个功能可以工作了。它完成了它的工作,但看起来真的很困惑,只是想听听你的想法,也许他们是我可以改进的东西?

非常感谢!

登录

$result = mysql_query("SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND password = '".md5($_POST['password'])."'");
$row = mysql_fetch_object($result);

if (mysql_num_rows($result) == 0) {
exit('Bad Login');
}

$_SESSION['id'] = mysql_result($result, 0, 'id');

# The user wants to be remembered
if (isset($_POST['remember'])) {
$key = md5(uniqid());
setcookie('remember', $key, time()+900000); /* expire in 10 days */
mysql_query("UPDATE users SET sessionkey = '$key' WHERE id = ".mysql_result($result, 0, 'id'));

}

在我检查的每一页上:

if (isset($_SESSION['id'])) {
header("Location: welcome.php");
}

elseif (isset($_COOKIE['remember'])) {

$rs = mysql_query("SELECT * FROM users WHERE sessionkey = '$_COOKIE[remember]'");

if (mysql_num_rows($rs) == 1) {
$_SESSION['id'] = 1;
header("Location: welcome.php");
}

}

最佳答案

将检查行数是否为零的代码放在mysql_fetch_object($result)语句之前。这样,如果用户不存在,您就不会浪费额外的 CPU 周期。

更改此设置(在两个地方):

mysql_result($result, 0, 'id');

$row->id;

此外,如果您的 id 列不卫生(即:用户在某个时刻为其输入了一些数据),您将需要在 中转义它更新查询。

这只是一个偏好问题,但是当我检查 URL 参数是否存在时,我喜欢使用 !empty() 而不是 isset。原因是如果参数设置了但为空,仍然会返回 false:

!empty($_POST['remember'])

另外,请务必清理 $_COOKIE['remember']。用户可以更改 Cookie 值。

mysql_query("SELECT * FROM users WHERE sessionkey = '" . mysql_real_escape_string($_COOKIE[remember]) . "'");

最后,最好不要在查询中选择 *,因为这可能会导致您稍后在应用中遇到性能障碍。考虑只选择用户的 ID:

mysql_query("SELECT id FROM users ...

其他一切看起来都不错!

关于php - 我的 "remember me"-功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com