C# 读取cookie以自动登录

C# 读取cookie以自动登录,c#,asp.net,cookies,C#,Asp.net,Cookies,我在有人登录时存储cookies,如下所示: List<User> listUser; //returns 1 user foreach(User u in listUser) { HttpCookie cookieNickname = new HttpCookie("UserNickname"); cookieNickname.Value = u.Nickname.ToString(); cookieNickname.Expires = DateTime.MaxV

我在有人登录时存储cookies,如下所示:

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);
}
列表列表用户;
//返回1个用户
foreach(listUser中的用户u)
{
HttpCookie cookieNickname=新的HttpCookie(“用户昵称”);
cookieNickname.Value=u.昵称.ToString();
Expires=DateTime.MaxValue;
Response.Cookies.Add(cookieNickname);
HttpCookie cookiePassword=新的HttpCookie(“用户密码”);
cookiePassword.Value=u.密码;
cookiePassword.Expires=DateTime.MaxValue;
Response.Cookies.Add(cookiePassword);
}
当有人再次访问该站点时,我想从与user昵称cookie和userpasswordcookie关联的数据库中读取数据

然后我想在标签上显示firstname和lastname

这就是我所尝试的:

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;
            }
        }
    }
列出cookieLoggedInUser;
if(Request.Cookies[“user昵称”]!=null和Request.Cookies[“UserPassword”]!=null)
{
//返回1个用户
cookieLoggedInUser=Database.SignIn(Request.Cookies[“user昵称”].ToString(),Request.Cookies[“UserPassword”].ToString());
如果(cookieLoggedInUser.Count>0)
{
foreach(cookieLoggedInUser中的用户u)
{
lblFirstName.Text=u.FirstName;
lblLastName.Text=u.LastName;
}
}
}
但是这两个Request.Cookies都返回null


为什么会发生这种情况?

我不建议您采用其他方法进行实验,因为它有很大的安全风险

要使您当前的解决方案正常工作,请检查您是否在使用cookie的同一域中创建cookie


如果不是这样,浏览器将不会向其他域发送Cookie。

我不建议您在其他域中使用这种方法进行测试,因为它有很大的安全风险

要使您当前的解决方案正常工作,请检查您是否在使用cookie的同一域中创建cookie


如果不是这样,浏览器将不会向其他域发送cookie。

您可以使用以下技术使登录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
事件,当用户单击“记住我”时,他们将保持登录状态


这比您建议的替代方案(在cookie中存储未加密的密码)安全得多。

您可以使用以下技术使登录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
事件,当用户单击“记住我”时,他们将保持登录状态


这比您建议的替代方案(将未加密的密码存储在cookie中)安全得多.

但是我如何在页面加载时读取cookie以从登录的人获取数据?如果您使用asp.net成员身份,您只需检查
请求。I已验证
但是我如何在页面加载时读取cookie以从登录的人获取数据?如果您使用asp.net成员身份,您只需检查
Request.IsAuthenticated