Как создать постоянные куки-файлы в asp.net?
Я создаю куки со следующими строками:
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);
теперь, как сделать его стойким?
потому что если я снова посещаю ту же страницу после закрытия браузера, я не могу ее вернуть.
6 ответов:
вот как вы можете сделать это.
писать в файл 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. }
хотя принятый ответ верен, он не указывает, почему исходный код не сработал.
плохой код из вашего вопроса:
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString()); userid.Expires.AddYears(1); Response.Cookies.Add(userid);взгляните на вторую строку. Основанием для истечения срока действия является свойство Expires, которое содержит значение по умолчанию 1/1/0001. Приведенный выше код оценивается в 1/1/0002. Кроме того, оценка не сохраняется обратно в собственность. Вместо этого свойство Expires должно быть установлено на основе текущего дата.
исправленный код:
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString()); userid.Expires = DateTime.Now.AddYears(1); Response.Cookies.Add(userid);
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; }
Как я понимаю, вы используете ASP.NET аутентификация и установить куки персистентные вам нужно установить 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);
вам нужно добавить это как последнюю строку...
HttpContext.Current.Response.Cookies.Add(userid);когда вам нужно прочитать значение cookie, вы должны использовать метод, похожий на этот:
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;
/ / добавить 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"]); }
Comments