【问题标题】:Why does the default ASP.NET Forms Authentication Cookie have a leading period in it's default name => ".ASPXAUTH"为什么默认的 ASP.NET 表单身份验证 Cookie 在其默认名称中有一个前导句点 => ".ASPXAUTH"
【发布时间】:2011-07-19 10:35:06
【问题描述】:

默认ASP.NET Forms Authentication cookie sets it's name as ".ASPXAUTH"。注意第一个字符是句号吗?这有什么特别的原因吗?比如,这对目标域的域名或子域有影响吗?

或者这纯粹是 MS 开发人员想出的一些随机的东西(也许是为了帮助 cookie 的排序,当它们在调试时或其他东西时......因为带有句点的文本会被列在其他字符串之前)?

【问题讨论】:

  • 我知道我迟到了,但我正要发布同样的问题并找到了这个问题。我澄清了正确的答案(这不是公认的答案)。经过一个小时的研究,我找不到任何说明为什么 Msft 选择“.ASPXAUTH”的东西,所以我猜这完全是任意的开发决定。我更希望他们将其称为“CHANGEME”,但哦,好吧..也许有人有一个在 Msft 工作的朋友,并且知道选择这个特定值的知识。
  • 我认为它会首先出现在 cookie 列表中

标签: .net asp.net cookies forms-authentication


【解决方案1】:

前导点字符是必需的。这是必要的,因为 HTTP 规范要求 cookie 域属性必须至少包含两个点

如果在开发过程中您想在http://site1.localhost/http://site2.localhost/ 之间共享cookie,这会带来不便。为了克服这个问题,您可以在主机文件中将 site1.localhost.dev 和 site2.localhost.dev 映射到 127.0.0.1,然后将域设置为 .localhost.dev

希望这会有所帮助...

【讨论】:

  • 我猜他的意思是cookie名称,而不是域名。
  • 您能否提供此 HTTP 规范要求的链接/证明,为什么会这样?如..为什么规范说包含两个点。最后..第二个点在哪里?我只看到一个(开始时)。
  • +1,但是@sajoshi,请检查我的回答,因为我认为你可能错过了一些东西。
  • 您确定 cookie domain 与 cookie name 相同吗?如果您阅读我的 cmets 到 @smartcaveman 的回复,我建议 cookie 域是 cookie 类的 seperate 属性。不是 name 属性。
  • 问题是关于cookie名称,而不是域名。
【解决方案2】:

我找不到 sajoshi 提到的“两个点”要求,但我确实在 HTTP 规范 rfc2109 上找到了这个。

域=域 可选的。 Domain 属性指定其所在的域 cookie 有效。明确指定的域必须始终启动 用一个点。

http://www.w3.org/Protocols/rfc2109/rfc2109

该部分是4.2.2 Set-Cookie 语法。在 sajoshi 的帖子之前我根本不知道有一个点要求,所以我查了一下,但似乎他说对了一半。如果有人仔细阅读并指出我遗漏的任何内容,请这样做。

更新

确实在第 4.3.3 节中发现

请求主机是一个 FQDN(不是 IP 地址),格式为 HD,其中 D 是域属性的值,H 是包含一个或多个点的字符串。

(FQDN 是完全限定域名)

来自请求主机 y.x.foo.com 的 Domain=.foo.com 的 Set-Cookie 将被拒绝,因为 H 是 y.x 并且包含一个点

和,

来自请求主机 x.foo.com for Domain=.foo.com 的 Set-Cookie 将被接受。

因此,如果 Cookie 域的名称基于域名,它似乎至少需要两个点。但是,aspnet 身份验证 cookie 不这样做,所以它只需要一个点。

【讨论】:

  • 很有趣..但我仍然不明白这一切。首先,我完全理解 FQDN 是什么,并且它们总是以点(所有互联网的根)结尾,因此,在开头有一个意味着预域(子域、子子域等)有空间.但是 .. ASP.NET cookie 有 另一个 属性,称为 Domain (msdn.microsoft.com/en-us/library/…)。所以你确定你不是在谈论那个属性吗?
  • @Pure.Krome,不,我不确定。我发布了文档的链接,但我没有花时间详尽地阅读它。您可以查看并做出自己的解释。如果你发现我弄错了,请解释一下
  • 问题是关于cookie名称,而不是域名。
【解决方案3】:

相同的 cookie 是完全可选的,它只会降低您覆盖可能由您的代码设置的不同 cookie 的可能性。两点要求仅与域名有关。

【讨论】:

  • 请注意,您可以更改 cookie 名称。如果您在同一个域上运行多个 ASP.NET 应用程序,您实际上会希望这样做,因为每个应用程序都会尝试重复使用相同的 cookie。
  • 这应该是公认的答案,因为 OP 询问的是name 而不是domain。我验证并澄清了答案,并引用了来自 Msft 的消息来源。谢谢匿名的懦夫!并且作为记录,我已经成功地使用了“test”作为name 的值,向自己证明不需要前置时间。
  • @nothingisnecessary - 请考虑发布your suggested edit 作为新答案。
  • 我进行了编辑而不是发布答案的事实表明我已经考虑过这一点并决定“不”。不是为了积分;只是想更新 BOK 并引用答案的来源。
猜你喜欢
  • 2019-05-22
  • 2015-09-14
  • 2020-03-20
  • 2020-09-23
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多