Как создать постоянные куки в asp.net? - PullRequest
68 голосов
/ 29 июня 2010

Я создаю куки со следующими строками:

HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);

Сейчас Как сделать его постоянным?

Потому что, если я снова захожу на ту же страницу после закрытия браузера, я не могучтобы вернуть его.

Ответы [ 6 ]

95 голосов
/ 29 июня 2010

Вот как вы можете это сделать.

Запись постоянного cookie.

//create a cookie
HttpCookie myCookie = new HttpCookie("myCookie");

//Add key-values in the cookie
myCookie.Values.Add("userid", objUser.id.ToString());

//set cookie expiry date-time. Made it to last for next 12 hours.
myCookie.Expires = DateTime.Now.AddHours(12);

//Most important, write the cookie to client.
Response.Cookies.Add(myCookie);

Чтение постоянного cookie.

//Assuming user comes back after several hours. several < 12.
//Read the cookie from Request.
HttpCookie myCookie = Request.Cookies["myCookie"];
if (myCookie == null)
{
    //No cookie found or cookie expired.
    //Handle the situation here, Redirect the user or simply return;
}

//ok - cookie is found.
//Gracefully check if the cookie has the key-value as expected.
if (!string.IsNullOrEmpty(myCookie.Values["userid"]))
{
    string userId = myCookie.Values["userid"].ToString();
    //Yes userId is found. Mission accomplished.
}
41 голосов
/ 25 июня 2015

Хотя принятый ответ является правильным, в нем не указано, почему исходный код не работал.

Неверный код из вашего вопроса:

HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);

Посмотрите на вторую строку. Основанием для истечения срока действия является свойство Expires, которое содержит значение по умолчанию 1/1/0001. Приведенный выше код оценивается до 01.01.2000. Кроме того, оценка не сохраняется обратно в собственность. Вместо этого свойство Expires должно быть установлено на основе текущей даты.

Исправленный код:

HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(userid);
26 голосов
/ 29 июня 2010

FWIW будьте очень осторожны с хранением чего-то вроде идентификатора пользователя в файле cookie в незашифрованном виде. Это делает ваш сайт очень подверженным отравлению cookie, когда пользователи могут легко выдать себя за другого пользователя. Если вы рассматриваете что-то подобное, я настоятельно рекомендую использовать файл cookie для проверки подлинности форм напрямую.

bool persist = true;

var cookie = FormsAuthentication.GetAuthCookie(loginUser.ContactId, persist);

cookie.Expires = DateTime.Now.AddMonths(3);

var ticket = FormsAuthentication.Decrypt(cookie.Value);

var userData = "store any string values you want inside the ticket
                 extra than user id that will be encrypted"

var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name,
     ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);

cookie.Value = FormsAuthentication.Encrypt(newTicket);

Response.Cookies.Add(cookie);

Затем вы можете прочитать это в любое время со страницы ASP.NET, выполнив

string userId = null;
if (this.Context.User.Identity.IsAuthenticated) 
{
    userId = this.Context.User.Identity.Name;
}
2 голосов
/ 26 ноября 2015

Насколько я понимаю, вы используете проверку подлинности ASP.NET, и для сохранения постоянных файлов cookie необходимо установить FormsAuthenticationTicket.IsPersistent = true. Это главная идея.

bool isPersisted = true;
var authTicket = new FormsAuthenticationTicket(
1,
user_name, 
DateTime.Now,
DateTime.Now.AddYears(1),//Expiration (you can set it to 1 year)
isPersisted,//THIS IS THE MAIN FLAG
addition_data);
    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, authTicket );
    if (isPersisted)
        authCookie.Expires = authTicket.Expiration;

HttpContext.Current.Response.Cookies.Add(authCookie);
0 голосов
/ 02 апреля 2013

// добавить cookie

var panelIdCookie = new HttpCookie("panelIdCookie");
panelIdCookie.Values.Add("panelId", panelId.ToString(CultureInfo.InvariantCulture));
panelIdCookie.Expires = DateTime.Now.AddMonths(2); 
Response.Cookies.Add(panelIdCookie);

// читать cookie

    var httpCookie = Request.Cookies["panelIdCookie"];
                if (httpCookie != null)
                {
                    panelId = Convert.ToInt32(httpCookie["panelId"]);
                }
0 голосов
/ 29 июня 2010

Вам нужно добавить это как последнюю строку ...

HttpContext.Current.Response.Cookies.Add(userid);

Когда вам нужно прочитать значение куки, вы должны использовать метод, подобный следующему:

    string cookieUserID= String.Empty;

    try
    {
        if (HttpContext.Current.Request.Cookies["userid"] != null)
        {
            cookieUserID = HttpContext.Current.Request.Cookies["userid"];
        }
    }
    catch (Exception ex)
    {
       //handle error
    }

    return cookieUserID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...