如何使浏览器在登录失败时不提示保存密码?


How can I make browsers not prompt to save password on failed login attempts?

我正在用PHP编写一个应用程序,它使用表单来检索用户名和密码输入。成功登录后,web浏览器将提示保存用户名和密码(在Firefox、Safari和Chrome上进行了测试)。

但是,如果用户登录失败,浏览器仍然会提示保存密码(这显然不是预期的行为)。如何在浏览器中显示登录不成功,不应该提示保存详细信息?

下面是登录页面的HTML:

<html>
  <head><title>Login</title></head>
<body>
  <style text="css">
    fieldset {
      padding: 10px;
      width: 250px;
      text-align: right;
    }
</style>
<form method="POST" action="checkLogin.php">
  <fieldset>
  <label for="user">Username: <input type="text" id="user" name="username" size="15" /></label><br />
  <label for="pass">Password: <input type="password" id="pass" name="password" size="15" /></label><br />
  <p><input type="submit" value="Login" /></p>
</fieldset>    
</form>
</body>
</html>

checkLogin.php脚本只是用DB检查登录信息以确保它是有效的,如果凭据不正确,则打印"Failed login attempt"。

有人能解释一下这个问题吗?我知道这是一个小问题,但我没有注意到我的浏览器提供保存密码的失败登录到其他网站。

提前感谢!

我很确定的问题是,"checklogin.php"是不相同的页面上这个表单出现。您应该将表单发送给它自己,如果失败则重新绘制登录表单。

如果您没有重新绘制表单,或者您发布到另一个页面,浏览器很可能会认为登录成功。我猜大多数浏览器都是根据相同的表单仍然存在这一事实来判断失败的。

这可能不是最简单的方法,但我所做的是使用AJAX提交表单,并将我要将用户发送到的页面放置在表单的动作属性中。然后,提交按钮的类型将是button而不是submit,并将在单击它时调用执行AJAX请求的Javascript函数。如果对checklogin.php文件的异步请求返回登录成功,我使用JavaScript提交表单,该表单实际上只是将用户发送到下一页,但浏览器将要求保存密码。此方法的另一个好处是,当提交错误的密码时,无需重新加载页面。