在 Cookie 中存储复选框选择
本文关键字:复选框 选择 存储 Cookie | 更新日期: 2023-09-27 17:56:29
>我已经编程了一个记住我复选框,以便在选中该复选框时将用户名和密码存储在cookie中。我的问题是,如果他们选中它,然后重新启动应用程序,用户名和密码会自动填充,但复选框不会保持选中状态。
我还没有想出一种方法来做到这一点...
我将在下面发布我的代码:
if (!IsPostBack)
{
if (Request.Cookies["UserName"] != null && Request.Cookies["Password"] != null)
{
userNameTxtBox.Text = Request.Cookies["UserName"].Value;
passwordTxtBox.Attributes["value"] = Request.Cookies["Password"].Value;
}
}
if (chkBoxRememberMe.Checked)
{
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(30);
Response.Cookies["Password"].Expires = DateTime.Now.AddDays(30);
}
else
{
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(-1);
Response.Cookies["Password"].Expires = DateTime.Now.AddDays(-1);
}
Response.Cookies["UserName"].Value = myUserName
string passwordEncrypted = Crypto.Sha256(myPassword);
Response.Cookies["Password"].Value = passwordEncrypted;
上面的代码正常工作。但是我有一个记住我复选框,如果选中它,我想将其保存到 cookie 中并保持选中状态,直到用户取消选中它......
有什么想法吗?
如果默认情况下
应在 cookie 存在时选中该复选框,那么我想您可以在此处设置其选中状态:
if (Request.Cookies["UserName"] != null && Request.Cookies["Password"] != null)
{
userNameTxtBox.Text = Request.Cookies["UserName"].Value;
passwordTxtBox.Attributes["value"] = Request.Cookies["Password"].Value;
chkBoxRememberMe.Checked = true; // <-- here
}
请注意,您可能在这里忽略了几个问题...
- 如果您在 cookie 存在时始终默认选中该复选框,则不会为用户提供任何取消选中该复选框的方法。 用户需要从浏览器中手动删除cookie,这不是一个非常好的用户体验。 (更不用说许多用户不知道如何做到这一点。
- 以纯文本形式存储用户的密码是非常不负责任的。 请立即停止这样做。 相反,生成某种唯一令牌来标识用户并将该令牌存储在 Cookie 中。 然后,服务器端代码将根据与已知用户关联的已知令牌验证令牌。 永远不要将用户的密码以纯文本形式存储在任何地方。
你所做的不仅在安全方面非常糟糕,而且还在重新发明轮子。
ASP.Net 已经支持开箱即用的表单身份验证、默认成员资格提供程序、正确加密/哈希身份验证 cookie,甚至带有"记住我"复选框的登录控件!
您将使用如下所示的标记将控件添加到 ASP.Net 登录页:
<asp:Login ID="LoginControl1" runat="server" CreateUserUrl="Register.aspx"
VisibleWhenLoggedIn="False" TextLayout="TextOnTop" RememberMeSet="True">
(我们已将 DisplayRememberMe 属性设置为 true。这将指示登录控件显示"下次记住我"复选框,并指示成员资格提供程序在成功登录后将持久性身份验证 Cookie 发送到用户的浏览器。
但是,在开始尝试之前,您可能应该阅读 MSDN 上的"演练:创建具有成员资格和用户登录的网站"。