【发布时间】:2016-06-07 09:46:39
【问题描述】:
如果我可以这么说的话,我一直在为一个奇怪的问题而苦苦挣扎。
我有一个控制器,我通过以下代码在其中设置了一个 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,因为我认为问题是由 URL 类似于 http://localhost:2322 的事实引起的,我现在处理一个 URL,我通过 Windows 上的主机文件将其设置为 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,所以它们都重定向到我的项目。
在我的代码中,我通过 Request.Cookies["cookieName"] 检查 cookie 是否存在。我还检查了 Request 中的 Url,发现它是指定的 URL 之一。根据每个网址,我加载不同的样式。我通过httpContext.Request.Url.Host 对此进行了检查,但是虽然给出了 URL,但没有给出 cookie。任何时候 cookie 都是空的,但我在我的 Chrome 控制台中看到它们,但在 Fiddler 中没有。我怎样才能使这项工作?在 Fiddler 中,我只看到 localhost:54121。我需要假设这是正确的地址吗?如果我导航到这个 URL,我会得到 404。
我希望这个解释很有意义,在此先感谢。
【问题讨论】:
-
您是否尝试过将 CookieDomain 显式设置为空字符串?
-
你的意思是在 webconfig 中或者当我在控制器中创建 HttpCookie 时?
-
var cookie = new HttpCookie("CookieName") { Value = Guid.NewGuid().ToString(), Expires = DateTime.Now.AddHours(12), Secure = false , Domain = "" };会是这个,但什么都没有
-
对不起,值得一试...
标签: c# asp.net-mvc cookies