Как получить значение cookie на сайте asp.net - PullRequest
36 голосов
/ 13 декабря 2011

Я создаю cookie и сохраняю значение имени пользователя после успешного входа в систему.Как я могу получить доступ к куки, когда сайт открыт.Если cookie существует, я хочу заполнить текстовое поле имени пользователя из значения cookie.И как расшифровать значение, чтобы получить имя пользователя.Я делаю проверку на стороне сервера, получая детали пользователя из базы данных.Я использую vs 2010 с c #

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 ]

80 голосов
/ 13 декабря 2011

Вы можете использовать Request.Cookies collection для чтения файлов cookie.

if(Request.Cookies["key"]!=null)
{
   var value=Request.Cookies["key"].Value;
}
19 голосов
/ 13 декабря 2011

FormsAuthentication.Decrypt принимает фактическое значение куки, а не его имя.Вы можете получить значение cookie, например

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

, и расшифровать его.

8 голосов
/ 13 декабря 2011

добавьте эту функцию в ваш 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 голосов
/ 19 января 2015
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";
}

Ссылка Нажмите здесь

...