如何在ASP.NET网站中获取cookie值

58

我正在创建一个cookie,并在成功登录后存储用户名的值。当打开网站时,如何访问cookie。如果存在cookie,则希望从cookie值填充用户名文本框。如何解密该值以获取用户名。我通过从数据库获取用户详细信息来进行服务器端验证。我使用C#和VS 2010。

FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
    DateTime.Now.AddYears(1), chk_Rememberme.Checked, "User Email");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);

if (chk_Rememberme.Checked)
{
    ck.Expires = tkt.Expiration;
    ck.Path = FormsAuthentication.FormsCookiePath;
    Response.Cookies.Add(ck);
}

cookie使用名称“.YAFNET_Authentication”创建,内容已加密。

Webconfig:

  <forms name=".YAFNET_Authentication" loginUrl="Home.aspx"
  protection="All" timeout="15000" cookieless="UseCookies"/>
4个回答

118

您可以使用Request.Cookies集合来读取cookie:

if (Request.Cookies["key"] != null)
{
   var value = Request.Cookies["key"].Value;
}

23

FormsAuthentication.Decrypt方法需要实际的cookie值,而不是cookie名称。您可以像这样获取cookie值:

HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value;

并且解密它。


8
请将以下代码添加到您的global.asax文件中
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    string cookieName = FormsAuthentication.FormsCookieName;
    HttpCookie authCookie = Context.Request.Cookies[cookieName];

    if (authCookie == null)
    {
        return;
    }
    FormsAuthenticationTicket authTicket = null;
    try
    {
        authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    }
    catch
    {
        return;
    }
    if (authTicket == null)
    {
        return;
    }
    string[] roles = authTicket.UserData.Split(new char[] { '|' });
    FormsIdentity id = new FormsIdentity(authTicket);
    GenericPrincipal principal = new GenericPrincipal(id, roles);

    Context.User = principal;
}

然后,您可以使用HttpContext.Current.User.Identity.Name来获取用户名。希望这有所帮助。

0
HttpCookie cook = new HttpCookie("testcook");
cook = Request.Cookies["CookName"];
if (cook != null)
{
    lbl_cookie_value.Text = cook.Value;
}
else
{
    lbl_cookie_value.Text = "Empty value";
}

参考 点击这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接