Request.Cookies is empty

本文关键字:empty is Cookies Request | 更新日期: 2023-09-27 18:36:08

我一直在为一个奇怪的问题而苦苦挣扎,如果我可以这么说的话。

有一个控制器,我在其中设置了一个cookie,通过以下代码:

var cookie = new HttpCookie("CookieName")
            {
                Value = Guid.NewGuid().ToString(),
                Expires = DateTime.Now.AddHours(12),
                Secure = false,
            };
            Response.Cookies.Add(cookie);

这个cookie被正确设置了(我猜),因为我在我的Chrome和控制台的FireFox中看到这个cookie。

我还有一段代码可以检查是否设置了特定的cookie:

    var token = Request.Cookies.Get("CookieName");
    if (token == null)
    {
       //Create a new cookie
    }

还尝试了这个:

var token = Request.Cookies["CookieName"]?.Value;

但是什么都没有,当我检查我的调试器时,我看到 Request.Cookie 不包含任何内容!我只是不明白这一点。

我使用VS2015社区,并将我的项目设置为通过IIS10启动,在WIndows 10 Pro - 64位上开发我停止使用IIS Express,因为我认为问题是由URL像 http://localhost:2322 引起的,我现在处理一个url,我通过Windows上的主机文件将其允许到127.0.0.1。域名A.local例如。

添加了我的网络配置:

<compilation debug="true" targetFramework="4.6"/>
<httpRuntime targetFramework="4.5.1"/>
<httpCookies domain="" httpOnlyCookies="true"/>
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880"/>
</authentication>

在评论身份验证时也尝试了这个


更新 26-02-2016:我将尝试以不同的方式解释我的问题。

我有一个VS2015项目,一个 ASP.NET MVC C#应用程序。此应用程序应侦听多个 URL。假设它应该听 www.domainA.com 和 www.thisdomainiscool.com。这两个域都放在 Windows 主机文件中到 127.0.0.1。因为我在端口 80 上运行 IIS,所以它们都重定向到我的项目。

在我的代码中,我通过 Request.Cookies["cookieName"] 检查 cookie 是否存在。我还检查了请求中的 URL,并看到它是指定的 URL 之一。根据每个网址,我加载不同的样式。我通过httpContext.Request.Url.Host检查这一点,但是虽然提供了URL,但cookie没有。每当 cookie 是空的,但我在我的 Chrome 控制台中看到它们,但在 Fiddler 中没有。我怎样才能做到这一点?在小提琴手中,我只看到本地主机:54121。我需要假设这是正确的地址吗?如果我导航到此 URL,我会得到 404。

我希望这个解释很有意义,提前谢谢。

Request.Cookies is empty

问题是 cookie 通常与主机名相关联,而不是 IP 地址

将项目添加到主机文件时,将允许 IP 堆栈将 IP 地址解析为主机名。

当您将 Cookie 设置为主机名时,浏览器会解析该主机名,并针对 Cookie 处理该位置。

Web服务器(在本例中为Visual Studio)不需要执行此操作 - 它正在接收请求,并且不知道它的主机名是什么。

在II中,您可以在配置文件中进行一些设置来解决此问题 - 我已经有一段时间没有使用VS studio了,所以可能有另一个技巧,但解决它的简单方法是在Visual Studio认为是主机的主机上设置cookie。 您可以在小提琴手中看到响应消息。

所以 -- 本地主机127.0.0.1

(虽然 127.0.0.1 是 IP 地址,但您可以将 cookie 设置为完整的 4 位 IP 地址,因为它不会导致安全问题。

确实没有其他方法可以解决这个问题。


解决饼干问题的最佳方法是使用提琴手。 小提琴手是多年前编写的实用程序,并且一直是免费的。 Telerik购买了它,但您仍然可以免费获得它 http://www.telerik.com/fiddler

使用Fiddler,您可以查看进出浏览器的流量,并查看从双方发送的cookie - 您还可以更改它们以执行测试。

我希望在安装小提琴手后大约 10 分钟,您就会知道问题所在——这将比我们所有人试图猜测的要高效得多。

这对

我有用,

var cookie = new HttpCookie("CookieName")
        {
            Value = Guid.NewGuid().ToString(),
            Expires = DateTime.Now.AddHours(12),
            Secure = false,
        };
        Response.Cookies.Add(cookie);

添加饼干

if (Request.Cookies["CookieName"] == null)
{
    var cookie = new HttpCookie("CookieName");
    cookie.Value = Guid.NewGuid().ToString();
    cookie.Expires = DateTime.Now.AddHours(12);
    cookie.Secure = false;
    Response.Cookies.Add(cookie);
}