【问题标题】:.NET MVC Write Cookie from ActionFilter.NET MVC 从 ActionFilter 写入 Cookie
【发布时间】:2010-12-06 03:17:24
【问题描述】:

我构建了一个 ActionFilter 来在我的 MVC 站点上托管一个页面点击记录器,并且需要将一些值保存到 cookie 中。我已经使用以下代码来编写 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 似乎出现在集合中,但在记录后续页面点击时不可用。

谢谢, 克里斯

【问题讨论】:

    标签: asp.net-mvc cookies action-filter


    【解决方案1】:

    尝试添加新 cookie 而不是修改现有集合:

    HttpCookie cookie = new HttpCookie("adid", MyValue);
    cookie.Expires = DateTime.Now.AddDays(30);
    
    filterContext.HttpContext.Response.Cookies.Add(cookie);
    

    【讨论】:

    • 好主意,但没有奏效。我在上面的帖子中添加了整个方法。
    • 运行 Fiddler 并查看响应中是否设置了 Cookies 标头
    【解决方案2】:

    您是否设置了 cookie 过期时间?默认 cookie 过期时间是会话 cookie(在浏览器关闭时删除)。要将 cookie 保存到磁盘,必须给它一个未来的日期。

    【讨论】:

    • 是的,过期设置为未来30天。
    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多