如果我可以这么说的话,我已经遇到了一个奇怪的问题。
我有一个控制器,我通过以下代码设置了一个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.Cookies什么都没包含!我只是不明白这一点。
我使用VS2015社区,我的项目设置通过IIS10启动,在WIndows 10 Pro - 64位上开发 我停止使用IIS Express,因为我认为这个问题是由于网址是http://localhost:2322而引起的,我现在处理的是一个网址,我通过Windows上的Host文件将其发送到127.0.0.1。例如domainA.local。
添加了我的web.config:
<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>
在认证被评论时也试过这个
2016年2月26日更新: 我将尝试以不同的方式解释我的问题。
我有一个VS2015项目,一个ASP.NET MVC C#应用程序。此应用程序应该侦听多个URL。我们应该听听www.domainA.com和www.thisdomainiscool.com。两个域都放在Windows主机文件中127.0.0.1。因为我在端口80上运行IIS,所以它们都重定向到我的项目。
在我的代码中,如果cookie存在,我通过Request.Cookies [“cookieName”]进行检查。我还检查了请求中的Url,看到它是指定的URL之一。根据每个网址,我加载了不同的风格。我通过httpContext.Request.Url.Host
检查这个但是虽然提供了URL,但cookie不是。任何时候cookie都是空的,但我在Chrome的控制台中看到它们,但不是在Fiddler中。我怎样才能做到这一点?在Fiddler我只看到localhost:54121。我需要假设这是正确的地址吗?如果我导航到此URL,我会收到404。
我希望这个解释很有意义,提前谢谢。
答案 0 :(得分:2)
问题是Cookie通常与主机名而非 IP地址相关联。
当您将项目添加到主机文件时,您允许IP堆栈将IP地址解析为主机名。
当您将cookie设置为主机名时,浏览器会解析该主机名,并且还会根据cookie处理该位置。
Web服务器(在本例中为Visual Studio)不需要这样做 - 它正在获取请求,并且它不知道它的主机名是什么。
在IIs中,您在配置文件中进行了设置以解决此问题 - 我暂时没有使用VS工作室,因此可能有另一种技巧,但解决它的简单方法是在主机上设置cookie视觉工作室认为是主持人。您可以在fiddler中看到响应消息。
所以 - localhost 或 127.0.0.1
(虽然127.0.0.1是一个IP地址,但您可以将cookie设置为一个完整的4位ip地址,因为它不会导致安全问题。)
没有其他方法可以解决这个问题。
解决cookie问题的最佳方法是使用fiddler。 Fiddler是一个多年前写的实用工具,一直都是免费的。 Telerik购买了它,但您仍可以http://www.telerik.com/fiddler
免费获得使用fiddler,您可以看到进出浏览器的流量,并查看双方发送的Cookie - 您也可以更改它们以执行测试。
我希望在安装提琴手后大约10分钟,你会知道问题是什么 - 这比我们想要猜测的所有人都要高效。
答案 1 :(得分:0)
这对我有用,
var cookie = new HttpCookie("CookieName")
{
Value = Guid.NewGuid().ToString(),
Expires = DateTime.Now.AddHours(12),
Secure = false,
};
Response.Cookies.Add(cookie);
添加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);
}