表单提交后登录错误

时间:2013-06-15 21:53:59

标签: php javascript jquery forms

我想要做的是有一个检查登录信息的表单,然后,如果信息不正确,它会将我重定向回登录表单所在的页面,但是显示的ap元素表示“用户名/密码错误“。

我有什么方法可以做到这一点?或者有什么办法可以只使用jQuery / ajax进行登录检查? 过去几个小时我一直试图解决这个问题,但我无法做到这一点。请记住,我是网络编程领域的新手,所以如果我的问题有明显的答案,请不要太苛刻。

4 个答案:

答案 0 :(得分:1)

凭据应存储在您的服务器上。

使用ajax,在表单提交上:

  1. 使用用户名和密码向php发出ajax请求
  2. 拥有php验证身份验证
  3. 如果无效的返回消息给JavaScript
  4. 如果无效,javascript可以提醒用户,否则可以适当地更改位置

答案 1 :(得分:0)

从您的服务器返回401 Unauthorized响应代码(请参阅此处:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

您可以使用PHP标头指令返回代码:http://php.net/manual/en/function.header.php

在您的javascript函数中,添加错误回调并根据需要更新DOM。

答案 2 :(得分:0)

是的,您可以使用ajax登录到登录表单。我假设你已经有了一些表单元素,只需要发布到登录页面。您可以创建一个这样的帖子请求:

xhttp=new XMLHttpRequest(); //make a request

xhttp.onreadystatechange=function() { //The request is asynchronous, this function will be executed once it completes
  if (xhttp.readyState==4 && xhttp.status==200) {
    if (xhttp.responseText==0) { //or whatever else your "error" is
      document.getElementById("errorDisplayDiv").innerHTML = "Login failed!"; //show a login error text
    }
    else if (xhttp.responseText==1) { //login page reported a success
      document.location = "usercontent.php"; //redirect to a page for logged in users
    }
  }
}

xhttp.open("POST","login.php",true); //post to your login page
xhttp.send(); //send it

所以这里有一些你需要的东西:

  • 登录页面上的用户名和密码表格将发布到login.php
  • 验证用户名和密码以及客户端登录记录的login.php(或ASP,无论如何)
  • 一个usercontent.php页面,用于验证用户是否已登录并显示正确的内容,如果不是,则将其重定向到登录页面。

这只是一个快速回答,如果您需要任何相关详细信息,请发表评论。

答案 3 :(得分:0)

除了dm03514所说的,不要试图在客户端授权用户 - 任何人都可以查看源并找出凭据。这是一个使用jQuery的非常简单的AJAX实现: http://jsfiddle.net/UTCbM/

'url'(check_username.php)应该包含处理用户名和密码的逻辑。这可以通过数据库,或者像这样简单的东西(但不推荐):

<?php
$users = array(
    'user1' => 'password1',
    'user2' => 'password2'
);

if ($users[$_POST['username']] == $_POST['password']) {
    die(json_encode('login_success.php'));
}
die(json_encode(False));
?>

注意事项:

1)不要以明文存储密码。如果您使用的是PHP,请查看Bcrypt: http://phpmaster.com/why-you-should-use-bcrypt-to-hash-stored-passwords/ 至少,哈希和盐你的密码。

2)此jsfiddle不执行SSL,您应该强烈考虑登录公共站点

3)如果要将数据作为JSON返回,则必须将'dataType':'json'添加到AJAX调用(我忘了小提琴)。

4)通过评估AJAX响应,您可以在.login-errors DIV中显示相应的错误消息。这只是一个简单的例子。

最后,如果您在公共站点上执行此操作,请阅读有关存储/访问登录凭据的一些安全最佳实践。如果这超出了您的期望,请考虑通过.htpasswd

阅读访问控制

同样,这是一个非常简单的实现,我不会使用这样的东西,但希望它会让你开始。

编辑:为清楚起见,返回的'错误'消息是因为调用了'错误'函数,因为AJAX不适用于小提琴。您实际上想要将错误消息编码到“成功”函数中,这与最初看起来的反直觉一样。