.NET MVC Написать Cookie из ActionFilter

Я создал ActionFilter для размещения регистратора посещений на своем сайте MVC и мне необходимо сохранить некоторые значения в cookie. Я использовал следующий код, чтобы написать куки:

public class LogRequestAttribute : ActionFilterAttribute, IActionFilter
{
   void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
   {
       if(filterContext.HttpContext.Request.UserHostAddress != "127.0.0.1")
           ThreadPool.QueueUserWorkItem(delegate
           {
               string adid = filterContext.HttpContext.Request.QueryString["adid"] != null 
                   ? (string)filterContext.HttpContext.Request.QueryString["adid"] : string.Empty;

               if (!String.IsNullOrEmpty(adid))
               {
                   HttpCookie cookie = new HttpCookie("adid", adid);
                   cookie.Expires = DateTime.Now.AddDays(30);
                   filterContext.HttpContext.Response.Cookies.Add(cookie);
               }

               DomainModel.Concrete.SqlPageHitActivity logger 
                   = new DomainModel.Concrete.SqlPageHitActivity(
                       System.Configuration.ConfigurationManager.ConnectionStrings["TrackingConnectionString"].ConnectionString);

               DomainModel.Entities.PageHitActivity hit = new DomainModel.Entities.PageHitActivity
               {
                   AdIdentifier = filterContext.HttpContext.Response.Cookies["adid"].Value == null ? string.Empty : filterContext.HttpContext.Response.Cookies["adid"].Value,
                   Authenticated = filterContext.HttpContext.Request.IsAuthenticated,
                   Browser = filterContext.HttpContext.Request.UserAgent,
                   CookieId = string.Empty,
                   Parameters = string.Empty,
                   Referer = filterContext.HttpContext.Request.UrlReferrer == null ? string.Empty : filterContext.HttpContext.Request.UrlReferrer.ToString(),
                   RequestDate = DateTime.Now,
                   RequestorIP = filterContext.HttpContext.Request.UserHostAddress,
                   SessionId = string.Empty,
                   SiteId = 1,
                   Target = filterContext.HttpContext.Request.Url != null ? filterContext.HttpContext.Request.Url.AbsoluteUri : string.Empty,
                   UserId = filterContext.HttpContext.Request.IsAuthenticated ? filterContext.HttpContext.User.Identity.Name : string.Empty
               };
               logger.LogHit(hit);
           });
   }
}

Кажется, что cookie появляется в коллекции, но недоступен, когда регистрируется следующее посещение страницы.

Спасибо Крис

12.10.2009 21:34:32
2 ОТВЕТА
РЕШЕНИЕ

Попробуйте добавить новый файл cookie вместо изменения существующей коллекции:

HttpCookie cookie = new HttpCookie("adid", MyValue);
cookie.Expires = DateTime.Now.AddDays(30);

filterContext.HttpContext.Response.Cookies.Add(cookie);
9
13.10.2009 05:52:49
Хорошая мысль, но это не сработало. Я добавил весь метод в мой пост выше.
user135498 13.10.2009 17:54:53
Запустите Fiddler и посмотрите, установлен ли заголовок Cookies в ответе
Richard Szalay 14.10.2009 05:50:48

Вы установили срок действия куки? Срок действия файла cookie по умолчанию - файл cookie сеанса (удаляется при закрытии браузера). Чтобы сохранить файл cookie на диск, необходимо указать его в будущем.

1
13.10.2009 02:14:46
Да, срок действия установлен на 30 дней в будущем.
user135498 13.10.2009 05:33:28