在常规电子邮件/密码表单的场景中,提交的表单向服务器发出POST请求以验证客户端凭据。
如何告知浏览器验证是否成功?即,如何告诉浏览器是否记住电子邮件/密码组合。
这是表单布局:
<form action="" method="post">
<fieldset>
<legend>Sign in</legend>
<label>
<span>Email</span>
<input type="text" name="ay[email]">
</label>
<label>
<span>Password</span>
<input type="password" name="ay[password]">
</label>
<input type="submit" value="Sign in">
</fieldset>
</form>
此过程中不涉及JavaScript。
答案 0 :(得分:0)
如果您正在执行form
提交操作以对会话进行身份验证,则浏览器会询问用户是否要记住username/password
组合。此外,浏览器还会检查用户添加到浏览器的任何例外情况,例如never remember
,never remember for the site
等。
答案 1 :(得分:0)
问:验证成功与否A:设置cookie。第二,你不能强迫浏览器记住组合,你可以设置cookie,你可以使用时间,谷歌使用多年需要多少时间:))
答案 2 :(得分:0)
解决此问题的大多数尝试都涉及绕过浏览器试探法进行登录,这很容易出错并且很容易过时。因此,我们应该看看浏览器本身推荐使用哪些身份验证功能。
遗憾的是,目前还没有跨浏览器的标准(the upcoming isLoggedIn
API 看起来就是这样),但与此同时,我们从 the Chromium Wiki’s Create Amazing Password Forms 那里得到了一些建议:
密码管理器需要一些表明已提交表单的指示。 尝试确保您的网页在表单上执行以下操作之一 提交:
另外,如果你执行一个异步请求 XMLHttpRequest 或 fetch,确保成功状态为 在响应头中正确设置。
<块引用>仅仅为了它而与众不同是不值得的。这将导致全面的用户体验不佳。这意味着,例如,如果登录失败,则不要导航到单独的网页:这是意料之外的,并且会让用户和密码管理器迷失方向。
由此,我们可以向至少一个浏览器推断登录失败的以下信号:
HTTP 响应的状态代码是一个错误。
表单提交不会导航到另一个页面(如果您未能成功登录,登录页面可能会重新加载,但至关重要的是它们保持在同一 URL)。
当用户尝试时,表单根本不提交——要么是因为 HTML 表单验证阻止了提交,要么是 JS 检查服务器是否接受登录并在表单提交事件上调用 .preventDefault
。 (前者不适用于错误的凭据;仅适用于 required
和 minlength
等基本检查。)
遗憾的是,我可以确认其中一些技术不能跨浏览器工作:例如,Firefox 在对表单提交的 HTTP 响应甚至到达之前乐观地显示其保存凭据菜单。 Mozilla has a bug open about this exact problem,但似乎做正确的事情来保持与现有网站的兼容性对他们来说同样棘手。
更令人痛心的是,from a duplicate of that bug:
<块引用>Matthew N. [:MattN] • 2 年前
我们现在应该仔细检查其他浏览器是如何处理这个问题的。我认为其他人现在开始复制我们。