Chrome本地主机cookie未设置

74

我有一个使用Cookie存储用户选择语言的ASP.net应用程序,在本地主机上工作时一切正常。但将localhost替换为127.0.0.1后,它又可以工作了...为什么?

我看到file://存在限制,但实际上找不到对localhost的限制。

我真正无法理解的是,为什么ASP.net会话(ASP.NET_SessionId)和ASP.net表单身份验证Cookie(.FSAUTHSSO)在localhost域中正确设置,但我的cookie却没有正确设置...为什么?!

我已经搜索了很多,但都不起作用:

  • 设置Chrome命令行标志--enable-file-cookies [无效]
  • 将Cookie设置为HttpOnly[无所谓]
  • 将过期时间更改为会话或日期... [无所谓]
  • 将Cookie Path更改为根(/)或任何其他内容[无所谓]

那么什么才是重要的呢?:)

ASP.net Cookie可以设置,而我的Cookie为什么不能设置?有什么区别吗?

最后提一下,这也会发生在IE上,但在FF上工作正常。

谢谢!

Alex


选项-> 在底部-> 隐私-> 内容设置中的Cookie设置是什么?或者您是否有任何应用于本地主机的异常情况? - Jon Adams
我没有更改过Google Chrome的设置。你所问的设置是:Cookies:允许设置本地数据(推荐)。 我也没有设置任何例外... 没有更改任何默认设置... - AlexCode
9
四年后,现在是2015年,这仍然是一个问题 - Gaui
由于本地主机服务器通常在不同的端口下运行,因此我应该提到您可以尝试使用没有明确端口的主机名设置cookie的url。例如,您可以尝试使用cookie.url ='127.0.0.1';而不是cookie.url ='127.0.0.1:3001';。这对我有用。有关更多信息,请参见此处:https://dev59.com/znI-5IYBdhLWcg3w6tFR - eremzeit
尝试使用 cookie.url='' ;让浏览器决定。 - Jeffz
“the url of the cookie”是什么意思? - Jens Mander
13个回答

47

Cookies是设计用于二级域名及以下。一级域名不会起作用。您应该使用地址http://127.0.0.1(如您所述),或者您可以编辑hosts文件将TLD映射到地址127.0.0.1的不同URL,例如:

yoursite.tld   127.0.0.1

我刚刚进一步研究了这个问题,找到了这个答案:在指定域名的本地主机上使用Cookie


5
是的,这就是我到处找到的“解决方案”,但仍然无法解释为什么其他 cookie 可以正常工作,比如我提到的 ASP.net cookie。 - AlexCode
2
ASP.NET的cookie是“session” cookie。Chrome会为localhost存储“session” cookie,但不会存储“permanent” cookie。要设置“session” cookie,只需在cookie上不设置过期日期(或将其明确设置为DateTime.MinValue)。实际上,每次浏览器关闭时都应删除会话cookie,但Chrome / Firefox具有功能,例如“继续上次打开的页面”或“从上次打开的选项卡中打开”,这实际上会导致浏览器无限期地保留“session” cookie而不是删除它们。有安全漏洞,哈哈。 - Triynko
天啊,我花了好几个小时来调试我的应用程序,结果只需要将本地主机更改为 127.0.0.1! - Rich

24

请尝试在本地主机上使用cookie.Domain = null,并在其他情况下使用域名。


这对我在本地运行起作用了。我曾经苦恼于其他参数,但是你的提示很有效。谢谢! - elvin
1
仍然不起作用。Cookie 出现在网络下,但无法传播到 Chrome F12 中的 Application/Cookies。 - Jens Mander
你们这些人有没有什么进展? - warmachine

23

我为此困扰了几个小时!然后我意识到:

  1. 我最近使用了完整的 HTTPS://localhost,并设置了一个同名的 cookie。

  2. 这就是 HTTP://localhost 无法设置该 cookie 的原因。

  3. 所以,我切换到 https,在“开发者工具”的“应用程序”选项卡中清除了 cookie,然后它又可以在 http 下正常工作了。


4
在我移除 Set-Cookie 头中的“Secure”标志后,我在 Google Chrome 中遇到了这个问题:你节省了我很多时间,谢谢! - boly38

9

我通过访问 chrome://flags/ 并搜索 cookies 来解决了我的问题。将以下 3 个标志设置为禁用...

  • 默认情况下 SameSite cookies
  • 启用删除 SameSite=None cookies
  • 没有 SameSite 的 cookies 必须是安全的

这种方法不会存在安全问题吗? - chess_madridista

7

我刚在Chrome上遇到了同样的问题。我的cookie.Secure = true。删除它并将其设置为localhost,问题就解决了。

(顺便说一句,我也遇到了完全相同的问题:在Firefox中工作正常,在IE或Chrome中无法正常工作)


7

4

我知道这可能有点傻,但我遇到了一个问题,接手了一个asp.net mvc应用程序,但无法在本地运行。最终,另一位开发人员指出最近添加的web.config中的一个条目。

<httpCookies httpOnlyCookies="true" requireSSL="true" />

将 requireSSL 设置为“false” 以在本地运行。请记得通过环境应用这些变换。希望这可以帮助你。

2

针对我的情况,我正在运行一个使用iisexpress(localhost:####)的asp.net core razor页面应用程序,并在Chrome中遇到了此问题。我的解决方法是确保Properties\launchSettings.json中的iisSettings具有除0以外的数字作为sslPort(44344)。如果将sslPort设置为0,则iisexpress将不会使用ssl运行。将其更改为44344,然后在iisexpress中使用ssl运行应用程序。另外,在Visual Studio的项目属性和调试选项卡中启用SSL也会对launchsettings.json进行相同的更改。例如

"iisSettings": {
  "windowsAuthentication": false,
  "anonymousAuthentication": true,
  "iisExpress": {
    "applicationUrl": "http://localhost:29025/",
    "sslPort": 44344
  }
},

2

自2011年以来,Chrome浏览器存在一个问题(详情):如果您显式将域名设置为“localhost”,则应将其设置为false才能正常工作,或者将域名设置为127.0.0.1


2
我在chrome上遇到了一个问题,一个未来两周到期的cookie没有被设置 - 这恰好是auth cookie(.AspNet.ApplicationCookie),所以我一直被重定向回登录页面。我尝试用自定义cookies实验结果发现,chrome认为当前日期比实际日期早 - 例如,我设置了一个今天过期的cookie(2017年4月2日),有效期为1年,但实际上chrome将该cookie的过期时间设为了2017年1月1日!这就解释了为什么一个有效期为两周的cookie已经被认为过期,因为chrome减去了3个月的实际有效期并认为它已经过期了。Chrome重启无法解决此问题,我重启了PC,这样“修复”了错误。同时请注意,这种情况只出现在localhost中,其他网站似乎没有问题。

谢谢,我调试了2个小时,尝试缩小Cookie大小和其他一些事情,但重新启动计算机解决了问题! - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接