Asp.net MVC:记住用户名

Asp.net MVC:记住用户名,asp.net,asp.net-mvc,cookies,Asp.net,Asp.net Mvc,Cookies,我想在我的MVC登录控制器中实现一个“记住用户名”功能。我只想记住用户名;我不想持久化用户的身份验证cookie(就像MVC模板中的“记住我”代码那样) 我假设如果用户将“记住用户名”复选框设置为true,那么控制器只需要将用户名保存在cookie中。如果用户随后点击我的登录页面,我会检查cookie是否存在,如果存在,则设置“记住我的用户名”复选框并将用户名提供给表单。听起来很简单;那么,为什么我在网上找例子来验证我的方法时遇到这么多困难呢 而且,将用户名保存在cookie中是否存在安全隐患?

我想在我的MVC登录控制器中实现一个“记住用户名”功能。我只想记住用户名;我不想持久化用户的身份验证cookie(就像MVC模板中的“记住我”代码那样)

我假设如果用户将“记住用户名”复选框设置为true,那么控制器只需要将用户名保存在cookie中。如果用户随后点击我的登录页面,我会检查cookie是否存在,如果存在,则设置“记住我的用户名”复选框并将用户名提供给表单。听起来很简单;那么,为什么我在网上找例子来验证我的方法时遇到这么多困难呢

而且,将用户名保存在cookie中是否存在安全隐患?这是相当敏感的信息;我想我要加密它。ASP.NET中有没有什么魔法可以让加密cookies变得容易,或者我需要“自己滚”吗

有人能为这个非常常见的场景提供指导和“最佳实践”吗

编辑:


你一定喜欢MS文档(如果你能找到的话)。我找到了你想知道的关于饼干的几乎所有信息。大多数示例都涉及到保存用户名(就像我想做的那样)。但是,在关于Cookies和安全性的部分中,它说“永远不要在cookie中存储敏感数据,例如用户名…”感叹…

将明文用户名存储在cookie中仅用于预填充登录表单是普遍接受的做法。(也有一些例外:例如,银行可能希望将用户名屏蔽为额外的防御层。但以安全的方式实现这一点并不简单——你不能只加密cookie,然后一天就调用它。这些是一般开发人员不必担心的高度专业化的场景。)


只是不要相信cookie中的数据。不要将其用作实际的登录cookie,不要将其写入未编码的响应(XSS),等等。

当然,您可能知道,这是大多数浏览器的一项功能。但是,如果我没看错的话,你希望强制这样做,而不是依赖于浏览器,对吗?@MikeMarks:好吧,我们中有一个人很困惑(可能是我)。浏览器知道如何识别用户名并为“type=password”的
元素提供匹配的密码。但是如果用户选择表单上的“记住我”复选框,那么这与自动填充Username
元素无关。所有当前浏览器都可以同时填写用户名和密码。好吧,我有点尴尬。。。我访问了我的制作网站的登录页面,果然,我的用户名和密码都是为我填写的。我以前从来没有注意到这种行为,可能是因为我总是在本地机器上运行开发网站,在这种情况下,IE会被阻止记住用户名。这就提出了一个明显的问题:IE不记得我的用户名,本地运行有什么不同?或者可能是因为我在本地框中使用了多个用户名登录?您可以告诉浏览器保存用户名/密码/其中一个或两个。特别是Chrome,因为我就是这么用的。但是,如果您想通过服务器端强制web应用程序通过某种“记住用户名”复选框记住用户名,这将确保所有浏览器都记住用户名,而不依赖于特定的浏览器设置。现在,有了这些,cookies,对我来说,是一条路要走。想想加密cookies的主题。我猜如果我在cookie上设置了Secure属性,那么cookie本身就不会被加密,但是它只会通过HTTPS发送,因此坏人需要物理访问用户的计算机才能获取cookie数据。(不介意我…我只是想了解一下整个cookie的事情。因此,像这篇文章这样的简单问题。)鲍勃,ASP.NET有加密API可供应用程序开发人员使用。有关用法示例,请参见和。这可以保护cookie数据不受不受信任的用户的攻击。例如,这就是我们保护表单验证cookie的方式,这样用户就不会篡改它。