php – 如何通过Ajax请求或每次加载页面来验证用户?
这是一个非常简单的问题 – 虽然我现在正在思考这个问题,因为我开始了我的第一个真实世界和相当宏伟的(在大小方面)项目.
当通过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的组合可以提高身份验证的完整性……但这完全是另一个主题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |