HttpContext.Request.cookies中缺少ASP.NET cookie.Chrome/IE中逗号与分号



我观察到一个问题,我向服务器发出请求,并检查Chrome与IE中的HttpContext.Request.Cookies集合是否不同。

我的流程如下:

  1. 为IE启动一个新的inPrivate浏览器,转到网站url
  2. 观察HttpContext.Request.Cookies是否具有三个值,siteLangsiteDirisNative
  3. 观察每个cookie的值分别为:

    • HttpContext.Request.Cookies["siteDir"].Value=="ltr"
    • HttpContext.Request.Cookies["siteLang"].Value=="en-US"
    • HttpContext.Request.Cookies["isNative"].Value==真
  4. 为Chrome启动一个新的匿名浏览器,转到网站url

  5. 观察HttpContext.Request.Cookies是否具有一个值,siteDir
  6. 观察HttpContext.Request.Cookies["siteDir"].Value的值为"ltr,siteLang=en-US,isNative=true"

我还观察到HttpContext.Request.Headers["Cookie"]包含以下取决于浏览器的值:

  • siteLang=en-US;siteDir=ltr;isNative=true//IE

  • siteDir=ltr,siteLang=en-US,isNative=true//Chrome


所以Chrome似乎是用逗号分隔我的cookie,IE使用分号,Mvc不知道如何处理逗号。其他人看到了吗?如果我的诊断是正确的,我觉得这个问题应该非常普遍。任何意见都将不胜感激。

编辑

我已经查看了ASP.NET源代码,并在HttpRequest.cs中找到了以下代码片段(位于此处:[http://referencesource.microsoft.com/#System.Web/HttpRequest.cs][1] ):

while (i < l) {
    // find next ';' (don't look to ',' as per 91884)
    j = i;
    while (j < l) {
        ch = s[j];
        if (ch == ';')
            break;
        j++;
    }
    // create cookie form string
    ...{continued}

有什么想法吗?我如何获得91884的信息,以了解他们为什么忽略逗号分隔的cookie?

我现在也注意到了类似的奇怪行为。但看看Fiddler,cookie列表实际上是以";"已分离。。

我使用的是Windows 10。我试着把我的承诺历史追溯到几个月前,但一直遇到这个问题。

这个问题似乎特别发生在SSL上。它能与操作系统/WindowsUpdate相关吗?

最新更新