在 Cookie 中存储复选框选择
Storing Check Box Selection in Cookies
我编写了一个“记住我”复选框,以便在选中该复选框时将用户名和密码存储在 cookie 中。我的问题是,如果他们选中它然后重新启动应用程序,用户名和密码会自动填充,但复选框不会保持选中状态。
我还没有想出办法...
我将 post 我的代码如下:
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;
以上代码可以正常工作。但我有一个记住我的复选框,如果它被选中,我想将它保存到 cookies 并保持选中状态,直到用户取消选中它....
有什么想法吗?
如果只要存在 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 已经支持开箱即用的表单身份验证、默认成员身份提供程序、适当的 encrypted/hashed 身份验证 cookie,甚至 logon control with a remember me checkbox!
您可以使用如下标记将控件添加到 ASP.Net 登录页面:
<asp:Login ID="LoginControl1" runat="server" CreateUserUrl="Register.aspx"
VisibleWhenLoggedIn="False" TextLayout="TextOnTop" RememberMeSet="True">
(我们已将 DisplayRememberMe 属性 设置为 true。这指示登录控件显示 "Remember me next time" 复选框,并指示成员身份提供程序将持久身份验证 cookie 发送到成功登录后的用户浏览器。)
在开始尝试之前,您可能应该阅读 "Walkthrough: Creating a Web Site with Membership and User Login" on MSDN。
我编写了一个“记住我”复选框,以便在选中该复选框时将用户名和密码存储在 cookie 中。我的问题是,如果他们选中它然后重新启动应用程序,用户名和密码会自动填充,但复选框不会保持选中状态。
我还没有想出办法...
我将 post 我的代码如下:
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;
以上代码可以正常工作。但我有一个记住我的复选框,如果它被选中,我想将它保存到 cookies 并保持选中状态,直到用户取消选中它....
有什么想法吗?
如果只要存在 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 已经支持开箱即用的表单身份验证、默认成员身份提供程序、适当的 encrypted/hashed 身份验证 cookie,甚至 logon control with a remember me checkbox!
您可以使用如下标记将控件添加到 ASP.Net 登录页面:
<asp:Login ID="LoginControl1" runat="server" CreateUserUrl="Register.aspx"
VisibleWhenLoggedIn="False" TextLayout="TextOnTop" RememberMeSet="True">
(我们已将 DisplayRememberMe 属性 设置为 true。这指示登录控件显示 "Remember me next time" 复选框,并指示成员身份提供程序将持久身份验证 cookie 发送到成功登录后的用户浏览器。)
在开始尝试之前,您可能应该阅读 "Walkthrough: Creating a Web Site with Membership and User Login" on MSDN。