网站如何在不重新加载页面的情况下检查登录凭据?

3
一些网站,比如YahooGoogle, 使用Ajax检查用户名/密码是否错误。显然必须有服务器端身份验证,因为任何人都可以更改本地JavaScript,并欺骗它认为用户名/密码是正确的。我想知道这是如何高效地完成的,因为服务器不会对相同的用户名/密码进行两次检查吧?考虑以下情况,用户登录网站:
  1. 用户进入登录页面
  2. 用户输入用户名/密码并点击提交
  3. 通过Ajax,服务器与客户端通信,检查输入的用户名/密码是否正确
  4. 服务器回复是否用户名/密码正确 - 在此示例中是正确的
  5. <form>被提交,一个间歇性页面通过POST接收输入的值,并在服务器端再次处理以验证用户名/密码是否正确,如果正确,则在会话中设置一个变量

在第5步中,服务器第二次检查相同的用户名/密码是否正确,是否有一种方法可以缓存第3步的结果或使过程更有效率?另外,服务器已经在第3步中收到了用户名/密码。但我不确定这是否能加速该过程。

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


5
服务器可以在4点创建该会话或者Cookie。无需再次检查用户/密码。 - nice ass
服务器将设置会话变量或Cookie。 - Shehabic
1
只是想指出:第三步,JavaScript 本身无法查询数据库,正确的术语应该是 AJAX :) - Nick
3个回答

2
在第三步中,您的onsubmit处理程序将向服务器发送AJAX请求以验证凭据,并通过在处理程序中调用.preventDefault()或从处理程序中返回false来防止正常的表单提交,因此第五步将永远不会发生。如果禁用了JavaScript,则您将没有一个onsubmit处理程序,而是进行正常的表单提交。
在第四步中,如果您收到“正确”的响应,则您的AJAX处理程序可以重定向到新页面;如果是“不正确”的响应,则应停留在登录页面,清除表单并显示错误消息。

所以基本上,如果服务器的响应是密码/用户名正确,则“onsubmit”处理程序将创建一个会话并返回true,否则将返回false(从而防止页面被重定向),并向用户显示“用户名/密码错误”的消息? - Celeritas
@Celeritas - 基本上是的,尽管onsubmit处理程序是客户端的javascript,但应该是服务器创建会话。一种方法是让服务器在用户名/密码正确时创建会话并将会话ID传回客户端。服务器可以用包含创建会话cookie的javascript方法的JSONP消息进行回复。 - Stephen P

1
在第三步,JS 应该将您的表单提交到服务器端进行处理并等待响应。如果禁用 JS,则表单将正常提交。

1
正如我的评论所说,我不确定我完全同意你的流程,这是我会想象的流程:
  1. 用户进入登录页面
  2. 用户输入用户名/密码并点击提交
  3. Jquery触发onclick动作,获取用户输入,发送ajax请求到php,php进行净化和查询以查看是否找到了凭据。
  4. 如果凭证正确,php设置会话和cookie,并返回ajax结果。
  5. 如果凭证不正确,php也会处理这个问题。

或者 如果您不想使用ajax

  1. 用户进入登录页面
  2. 用户输入用户名/密码并点击提交
  3. 表单路由到一个php页面,该页面查询用户凭据的数据库,如果凭证正确,则设置会话和cookie并重定向到correctLogin.php
  4. 如果不正确,则重定向到incorrectLogin.php

1
JavaScript和jQuery不是同义词。 - itachi
我从未说过它们是,但坦白地说,我发现使用jQuery更容易处理点击事件。 - Nick
但是,@Nick,你应该在表单上使用提交事件,而不是提交按钮上的点击事件。(这并不影响你对jquery的看法) - Stephen P
@StephenP 如果你正在运行一个ajax查询,使用表单提交函数就没有意义了。如果你基于jquery触发事件,你可以通过jquery发送结果并返回ajax,我认为jquery也比javascript更好地处理ajax。最后你可以使用javascript或jquery。我只是列出了我的偏好。 - Nick
@Nick 我同意并使用jQuery,因为它可以比普通的JavaScript更清晰地处理事件处理和ajax。我的观点是,表单可以在没有单击提交按钮的情况下被提交;使用submit事件是很有道理的,绑定到submit比绑定到click更好。我在任何地方都这样做——常规表单提交被阻止,取而代之的是submit事件处理程序发送ajax查询。但是,如果某人关闭/阻止了JavaScript,正常的提交也会被执行。即使从未单击提交按钮,或以编程方式提交表单,这也能实现。 - Stephen P
哇,我刚才完全没看到那个,你说得对,我为反驳你而道歉,我想我误解了你最初的观点 :p - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接