Ajax 请求与任何其他 HTTP 请求完全相同。无论是通过 JavaScript 还是通过在浏览器的地址栏中输入 URI 来完成,它们都是 HTTP 请求。
你是对的,通过 HTTP 发送用户名和密码是错误的解决方案。但是,通常需要发送一次用户名/密码,但这只能在 HTTPS 上完成,因此它不会以纯文本形式发送。一旦通过身份验证,您可以将用户 ID 存储在服务器端会话变量中,以便在将来的请求中访问。
一些伪代码可以帮助您:
if(!empty($_SESSION["userId"])) {
// User is authenticated. Do something.
}
else if(!empty($_POST["username"])) {
// User is attempting to log in. Check against database.
$userId = getUserIdByUsernamePassword($_POST["username"], $_POST["password"]);
// Store user id in session variable.
if($userId > 0) {
$_SESSION["userId"] = $userId;
}
}
else {
// User is not authenticated.
}
一个常见的陷阱是将身份验证存储在 cookie 中。Cookie 存储在客户端,因此如果您这样做,任何人都可以通过创建自己的 Cookie 来伪造身份验证。
在 PHP中使用会话变量,使用 cookie ,但它根本不识别用户,而是识别客户端和服务器之间的连接。
但要成功验证真实世界的项目,不应依赖会话 cookie。相反,会话变量、UUID cookie 和加盐哈希 cookie 的组合可以提高身份验证的完整性……但这完全是另一个话题。