2009-10-12 91 views
2

我構建了一個ActionFilter來託管我的MVC站點上的頁面點擊記錄器,並且需要將一些值保存到cookie中。我已使用以下代碼來編寫Cookie:.NET MVC從ActionFilter寫入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似乎出現在集合中,但在記錄後續頁面命中時不可用。

謝謝, 克里斯

回答

7

嘗試添加新的cookie,而不是修改現有的集合:

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

filterContext.HttpContext.Response.Cookies.Add(cookie); 
+0

好想法,但它沒有奏效。我在上面的帖子中添加了整個方法。 – user135498

+0

運行Fiddler並查看Cookies頭是否在響應中設置 –

1

你設置cookie過期?默認的cookie過期是一個會話cookie(當瀏覽器關閉時刪除)。將cookie保存到磁盤必須爲它提供未來的日期。

+0

是,過期設置爲在未來30天。 – user135498