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。
我希望这个解释很有意义,提前谢谢。
问题是 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);
}