2013-07-15 2 views
1

У меня есть файл cookie, который я добавляю к ответу, но если файл cookie с тем же ключом уже существует, я хочу удалить его, иначе я получаю 2 куки одного и того же ключа.Удалить файл cookie, если он не работает

Я подумал, что просто истекает срок действия файла cookie, который он удалит из браузера?

HttpCookie cookie = new HttpCookie("UserCookie"); 
cookie.Value = encTicket; 

if (HttpContext.Current.Request.Cookies["UserCookie"] != null) 
    ClearCookie("UserCookie"); 

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


private static void ClearCookie(string key) 
{ 
    var httpContext = new HttpContextWrapper(HttpContext.Current); 
    var _response = httpContext.Response; 

    HttpCookie cookie = new HttpCookie(key) 
    { 
     Expires = DateTime.Now.AddMonths(-1), 
     Value = null 
    }; 

    _response.Cookies.Add(cookie); 
} 

Любая помощь очень ценится.

+0

Фактически добавление истекшего файла cookie создает другое, поэтому вместо него я получаю три, оригинал, истек, я добавил, и новый. – Wilky

ответ

0

На данный момент я просто выбирая последнее значение куков в коллекции, хотя я понимаю, что это массовый взлом. Любые лучшие предложения очень приветствуются.

string value = ""; 
for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++) 
{ 
    if (HttpContext.Current.Request.Cookies[i].Name == "UserCookie") 
    value = HttpContext.Current.Request.Cookies[i].Value; 
} 
3

«Вы не можете напрямую удалить куки-файлы на компьютере пользователя. Однако вы можете направить браузер пользователя для удаления cookie, установив дату истечения срока действия cookie на прошлую дату. В следующий раз, когда пользователь сделает запрос на страницу в пределах домена или пути, которые устанавливают cookie, браузер определит, что cookie истек и удалил его ».

Для получения более подробной информации, пожалуйста, прочитайте следующую статью.

http://msdn.microsoft.com/en-us/library/ms178195(v=vs.85).aspx

+0

Проблема заключается в том, что я изменяю значение cookie, а затем пытаюсь использовать его до того, как вернусь в браузер, поэтому у меня всегда есть 2. Если бы это был способ выбрать самое последнее, что было бы достаточно. – Wilky

1

Вот как я пишу мое печенье.

protected string CookieSession(Enums.CookieSessionTypes sessionTypes, string cookieValue = "") 
    { 
     string sessionId = string.Empty; 

     var cookie = new HttpCookie(CookieName); 

     switch (sessionTypes) 
     { 
      case Enums.CookieSessionTypes.Add: 

       cookie.Values[SessionIdConst] = cookieValue; 
       cookie.Expires = DateTime.Now.AddDays(1); 
       Response.Cookies.Add(cookie); 
       sessionId = cookieValue; 

       break; 
      case Enums.CookieSessionTypes.Delete: 
       cookie.Values[SessionIdConst] = cookieValue; 
       cookie.Expires = DateTime.Now.AddDays(-1); 
       Response.Cookies.Add(cookie); 

       break; 
     } 


     return sessionId; 
    } 

Дайте ему попробовать, должны работать

+0

Спасибо filix, но у меня такая же проблема. см. комментарии к последнему сообщению. – Wilky

0

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

Смежные вопросы