2016-01-25 17 views
1

我有一个现有的asp.net mvc web应用程序,我想停止浏览器从下次自动记住密码。我可以这样做,而不需要更改密码上的输入autocomplete =“off”,而我可以看到这应该解决未来的问题,任何已经完成此操作的人可能仍然可以在密码缓存时登录。ASP.Net MVC - 停止自动完成密码

回答

1

确实autocomplete="off"会做的伎俩。你会看到它被用在这里左右为好(右上):

@Html.TextBoxFor(model => model.Input, new { autocomplete="off" }) 

您也可以将所有的人都在一次:

<input style="display: inline-block; width: 188px; max-width: 188px;" name="q" placeholder="search" value="" tabindex="1" autocomplete="off" maxlength="240" type="text"> 

您可以用剃刀将它添加到您的输入使用jQuery:

$(document).ready(function() { 
    $("input:text, form").attr("autocomplete", "off"); 
}) 

对于缓存部分,看看从"How to Turn Off Form Autocompletion" (MDN)此摘录(整个文档值得一读):

这里设置autocomplete="off"有两个作用:

  • 停止浏览器保存现场数据后自动完成类似的形式,虽然通过浏览器有所不同试探。
  • 它在会话历史记录中停止浏览器缓存表单数据。表单数据缓存在会话历史记录中时,用户填写的用户填写的信息将在用户提交表单后可见,并且 单击后退按钮返回到原始表单页面。

在某些情况下,即使autocomplete属性设置为off,浏览器也会不断提示自动填充值 。对于开发者来说,这种意想不到的行为可能会令人费解。诀窍真正 迫使没有完成是一个随机字符串分配给属性 像这样:

autocomplete="nope"

由于这个随机值不是一个有效的,浏览器会放弃。

您还应该检查此行为在所有主流浏览器之间是否一致(具体取决于您所支持的浏览器支持情况)。

更新:迈克尔·刘在评论中指出,“现代浏览器忽略密码字段autocomplete属性”,在这种情况下,我不知道一个合法的解决方案。

你可以尝试把password类型的附加input场您的实际一个顶部,并将其设置为隐藏,浏览器应该尝试自动完成,与其:

<!-- before your actual password field --> 
<input style="display: none;" type="password" name="pwdplaceholder"/> 

...然而搞乱浏览器行为不是最佳实践。

还可以看看another SO question(由Michael Liu在评论中分享)。

+0

这实际上回答了这个问题吗?来自OP:“我可以看到这应该解决未来的问题,任何已经完成此操作的人可能仍然可以在密码缓存时登录。” –

+0

现代浏览器在密码字段上忽略'autocomplete =“off”'属性。 –

+1

@MichaelLiu不是'autocomplete =“nope”'每个上面的摘录应该达到什么? – trashr0x