3

一些网站,例如YahooGoogle,使用 Ajax 来检查用户名/密码是否错误。显然必须有服务器端身份验证,因为任何人都可以更改本地 JavaScript 并欺骗它认为用户名/密码是正确的。我想知道这是如何有效地完成的,因为服务器不会两次检查相同的用户名/密码吗?考虑以下用户登录网站的场景:

  1. 用户来到登录页面
  2. 用户输入用户名/密码并点击提交
  3. 如果输入的用户名/密码正确,服务器通过 Ajax 与客户端通信
  4. 服务器回复说用户名/密码是否正确 - 在这个例子中是
  5. 提交后,<form>间歇性页面将输入的值通过POST并在服务器端再次处理以验证用户名/密码是否正确以及是否在会话中设置了变量

在第 5 步中,服务器会第二次检查与第 3 步中相同的用户名/密码是否正确。有没有办法缓存第 3 步的结果或提高流程效率?此外,服务器已经在第 3 步中发送了用户名/密码。但我不确定这是否会加速该过程。

我正在使用 MySQL 数据库来存储用户名和密码。

4

3 回答 3

2

在第 3 步,您的onsubmit处理程序会将您的 AJAX 请求发送到服务器以验证凭据阻止正常的表单提交(通过调用.preventDefault()处理程序或从处理程序返回 false),因此第 5 步将永远不会发生。如果禁用了 javascript,那么您将没有 onsubmit 处理程序,而是将进行正常的表单提交。

在您的第 4 步中,如果您收到“正确”响应,则您的 AJAX 处理程序可以重定向到新页面;如果它是一个“不正确”的响应,你会留在登录页面,清除表单,并提出你的错误消息。

于 2013-02-27T01:18:39.453 回答
1

在第 3 点,JS 应该将您的表单提交给服务器端处理并等待响应。如果 JS 被禁用,那么表单将正常提交。

于 2013-02-27T00:59:04.257 回答
1

正如我的评论所说,不确定我是否完全同意您的流程,这就是我的想象

  1. 用户来到登录页面
  2. 用户输入用户名/密码并点击提交
  3. Jquery 触发 onclick 操作,获取用户输入,向 php 发送 ajax 请求,php 清理并查询是否找到凭据。
  4. 如果它们是 php 设置 session 和 cookie 并返回 ajax 结果。
  5. 如果凭据不正确,php 也会处理该问题。

或者 如果你不想使用 ajax

  1. 用户来到登录页面
  2. 用户输入用户名/密码并点击提交
  3. 表单路由到 php 页面查询数据库以获取用户凭据,如果它们正确,则设置会话和 cookie 并重定向到 correctLogin.php
  4. 如果没有重定向到不正确的Login.php
于 2013-02-27T01:08:09.167 回答