我在有人登录时存储Cookie,如下所示:
List<User> listUser;
//returns 1 user
foreach(User u in listUser)
{
HttpCookie cookieNickname = new HttpCookie("UserNickname");
cookieNickname.Value = u.Nickname.ToString();
cookieNickname.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookieNickname);
HttpCookie cookiePassword = new HttpCookie("UserPassword");
cookiePassword.Value = u.Password;
cookiePassword.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookiePassword);
}
当有人再次访问该网站时,我想从数据库中读取与usernickname-cookie和userpassword-cookie相关联的数据。
然后我想在标签上显示名字和姓氏。
这就是我的尝试:
List<User> cookieLoggedInUser;
if (Request.Cookies["UserNickname"] != null && Request.Cookies["UserPassword"] != null)
{
//returns 1 user
cookieLoggedInUser = Database.SignIn(Request.Cookies["UserNickname"].ToString(), Request.Cookies["UserPassword"].ToString());
if (cookieLoggedInUser.Count > 0)
{
foreach (User u in cookieLoggedInUser)
{
lblFirstName.Text = u.FirstName;
lblLastName.Text = u.LastName;
}
}
}
但是两个Request.Cookies都返回null。
为什么会这样?
答案 0 :(得分:1)
我不建议您采用其他方法进行实验,因为它存在很大的安全风险。
要使您的解决方案正常工作,请检查您是否在使用它们的同一域中创建了Cookie。
如果不是这样,浏览器不会将cookie发送到其他域。
答案 1 :(得分:0)
您可以使用以下技术使登录Cookie永久保存:
protected void Login1_OnLoggedIn(object sender, EventArgs e)
{
CheckBox Remember = (CheckBox)((Login)sender).FindControl("Remember");
if (Remember.Checked)
{
FormsAuthenticationTicket t = new FormsAuthenticationTicket(2, Login1.UserName, DateTime.Now, DateTime.Now.AddYears(5), true, "");
string data = FormsAuthentication.Encrypt(t);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, data);
authCookie.HttpOnly = true;
authCookie.Domain = "";
authCookie.Expires = t.Expiration;
Response.Cookies.Remove("FORMAUTH");
Response.Cookies.Add(authCookie);
Response.Redirect(Request.QueryString["ReturnUrl"]);
}
}
这假设该网站使用的是asp.net会员服务。
显示Response.Cookies.Remove("FORMAUTH");
的行应与您在此部分下的web.config中设置的Cookie名称相匹配:
<authentication mode="Forms">
<forms cookieless="UseCookies" loginUrl="~/Login.aspx" name="FORMAUTH"/>
</authentication>
将其连结至OnLoggedIn
控件的<asp:Login>
事件,当用户点击“记住我”时,他们会保持登录状态。
这比您建议的替代方案(在cookie中存储未加密的密码)更安全。