ASP.NET MVC 5 - 未创建Cookie

时间:2014-11-04 20:11:27

标签: c# asp.net asp.net-mvc cookies asp.net-mvc-5

我正在执行调用处理cookie的私有方法的控制器操作。问题是根本没有创建cookie。我在SO上阅读了多个帖子,但我还没有找到答案,因为我认为我在这段代码中处理cookie是正确的。

我是否需要检查有关cookie的web.config设置?我也试过不同的浏览器。

我调试了代码,我可以看到cookie实际上是在代码中设置的,但是只要我加载页面并查看cookie就不存在cookie。

  private ABHomeModel HandleWhiteBoxCookie(ABHomeModel model)
        {
            var whiteBox = _whiteBoxService.GetActiveWhiteBox();

            if (model.WhiteBox != null)
            {
                const string cookieName = "whiteBox";

                var whiteBoxCookie = HttpContext.Request.Cookies.Get(cookieName);

                if (whiteBoxCookie != null)
                {
                    var displayedTimes = Convert.ToInt32(whiteBoxCookie.Value);
                    if (displayedTimes < 2)
                    {
                        displayedTimes++;

                        var cookie = new HttpCookie(cookieName, displayedTimes.ToString())
                        {
                            Expires = new DateTime().AddMonths(1),
                            Secure = false
                        };

                        HttpContext.Response.Cookies.Set(cookie);
                        ViewBag.IsWhiteBoxActive = true;
                    }
                    else
                    {
                        ViewBag.IsWhiteBoxActive = false;
                    }
                }
                else
                {
                    var cookie = new HttpCookie(cookieName, "1")
                    {
                        HttpOnly = true,
                        Domain = Request.Url.Host,
                        Expires = DateTime.Now.AddMonths(1),
                        Secure = false
                    };

                    HttpContext.Response.Cookies.Add(cookie);
                    ViewBag.IsWhiteBoxActive = true;
                }

                model.WhiteBox = whiteBox;
            }

            return model;
        }

1 个答案:

答案 0 :(得分:0)

我的同事发现了这个问题。这是关于设置域名。一旦我们删除了这一行:

Domain = Request.Url.Host,

Cookie开始正常运行,现在正在创建。

该方法的完整更新代码:

private ABHomeModel HandleWhiteBoxCookie(ABHomeModel model)
        {
            var whiteBox = _whiteBoxService.GetActiveWhiteBox();

            if (whiteBox != null)
            {
                const string cookieName = "whiteBox";

                var whiteBoxCookie = HttpContext.Request.Cookies.Get(cookieName);

                if (whiteBoxCookie != null)
                {
                    var displayedTimes = Convert.ToInt32(whiteBoxCookie.Value);
                    if (displayedTimes < 2)
                    {
                        displayedTimes++;

                        var cookie = new HttpCookie(cookieName, displayedTimes.ToString())
                        {
                            HttpOnly = true,
                            Secure = false
                        };

                        HttpContext.Response.Cookies.Set(cookie);
                        ViewBag.IsWhiteBoxActive = true;
                    }
                    else
                    {
                        ViewBag.IsWhiteBoxActive = false;
                    }
                }
                else
                {
                    var cookie = new HttpCookie(cookieName, "1")
                    {
                        HttpOnly = true,
                        Expires = DateTime.Now.AddMonths(1),
                        Secure = false
                    };

                    HttpContext.Response.Cookies.Add(cookie);
                    ViewBag.IsWhiteBoxActive = true;
                }

                model.WhiteBox = whiteBox;
            }

            return model;
        }