加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何通过Ajax请求或每次加载页面来验证用户?

发布时间:2020-12-13 17:20:02 所属栏目:PHP教程 来源:网络整理
导读:这是一个非常简单的问题 – 虽然我现在正在思考这个问题,因为我开始了我的第一个真实世界和相当宏伟的(在大小方面)项目. 当通过PHP发送Ajax请求时,我将如何验证用户的身份(用户名和密码)?似乎有一个简单的解决方案:将用户名和密码作为POST变量与请求中的其
这是一个非常简单的问题 – 虽然我现在正在思考这个问题,因为我开始了我的第一个真实世界和相当宏伟的(在大小方面)项目.

当通过PHP发送Ajax请求时,我将如何验证用户的身份(用户名和密码)?似乎有一个简单的解决方案:将用户名和密码作为POST变量与请求中的其他变量一起发送,但在我看来解决方案效率很低(因为每次请求都必须检查数据库)对于不同的Ajax请求,它是完全冗余的.

我研究了Twitter如何处理他们的Ajax请求(例如发布新的推文),我没有看到他们在请求中发送任何身份验证信息 – 但是他们怎么知道它实际上是我,我的个人资料的所有者,发送Ajax请求发布新推文?

如果它能帮助任何人提出一个很好的解决方案 – 我使用的是JQuery AJAX库和CodeIgniter PHP框架.

谢谢!

解决方法

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的组合可以提高身份验证的完整性……但这完全是另一个主题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读