我如何为这个脚本实现自动登录功能?
session_start();
$result = mysql_query("SELECT id FROM users
WHERE username = '{$_POST['username']}'
AND password = '{$_POST['password']}'");
if (isset($_POST['savelogin'])) {
setcookie("SaveLogin", $_POST['username'], time()+3600);
setcookie("SaveLogin", $_POST['password'], time()+3600);
}
if (mysql_num_rows($result) == 0) {
exit('wrong username/password');
} else {
$_SESSION['id'] = mysql_result($result, 0, 'id');
header("Location: ./");
}
<form method="post">
Username: <input type="text" name="username" size="22" /><br>
Password: <input type="password" name="password" size="22" /><br>
<br>
Autologin? <input type="checkbox" name="savelogin" />
<input type="submit" value="Login" />
</form>
这就是我的进展。保存用户名和密码。 但是我应该怎么做才能自动登录?
最佳答案
首先,您不想将用户名和密码保存到 cookie 中。这是个坏主意。
一个简单的思考方法是:
1) 在用户表中创建一个新字段,用于存储 MD5 哈希值。您可以将其称为 session key 。
2) 提交页面时,脚本应执行以下操作。
- 验证用户名和密码
- 如果是正确的用户名和密码对,检查 saveLogin 变量
- 如果设置了 saveLogin 变量,则生成一个 md5 并将其存储在数据库中。还将那个 md5 存储在 cookie 中。确保数据库表也有一个 cookie-expires 字段。
- 构建您需要的 session 数据。
- 重定向到./
3) 在您的 ./页面上,执行以下操作:
- 检查 session 是否仍然存在。如果是,则呈现页面。
- 如果 session 不存在,检查 cookie。
- 如果 cookie 存在,请在数据库中查找该 session ID 并确保它没有过期。然后构建 session 并呈现页面。
这应该会使您的应用更加安全。这可能不是最好的编码方式,但这些概念应该能让您了解如何制作相当安全的登录页面。
关于用于登录脚本的 PHP Autologin 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382303/