Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 清除缓存后设置cookie不适用于IE11/10_Asp.net_Authentication_Cookies_Asp.net Web Api_Forms Authentication - Fatal编程技术网

Asp.net 清除缓存后设置cookie不适用于IE11/10

Asp.net 清除缓存后设置cookie不适用于IE11/10,asp.net,authentication,cookies,asp.net-web-api,forms-authentication,Asp.net,Authentication,Cookies,Asp.net Web Api,Forms Authentication,我目前遇到一个问题,在清除缓存/cookies后,IE10和IE11将不会再次设置cookie。请求和响应看起来几乎相同,但在清除缓存后,cookie永远不会被传递,即使它似乎设置正确 以下是我的登录方法的流程: 1. VerifyLogin() -> Fail: Go To Login page -> Pass: Call rest of the AJAX Methods // Enter Login Credentials and

我目前遇到一个问题,在清除缓存/cookies后,IE10和IE11将不会再次设置cookie。请求和响应看起来几乎相同,但在清除缓存后,cookie永远不会被传递,即使它似乎设置正确

以下是我的登录方法的流程:

 1. VerifyLogin()    -> Fail: Go To Login page
                     -> Pass: Call rest of the AJAX Methods // Enter Login Credentials and submit
 2. Authentication() -> Fail: Prompt the user
                     -> Pass: set forms auth cookie and navigate back to original page, where it will call VerifyLogin() again
 <authentication mode="Forms">
      <forms enableCrossAppRedirects="true" name="Gator.Express.Auth" timeout="2880" />
    </authentication>
一旦身份验证()通过,他们就可以顺利通过VerifyLogin()并继续使用该产品。现在,所有调用都将传递表单身份验证cookie

在我看到失败的实例中,Authentication()调用通过并获得200 OK(并且有一个设置的cookie响应头),然而,VerifyLogin()随后失败,因为它没有通过cookie

我真的很难复制这个,但到目前为止,我的复制步骤如下。这是从没有IE运行实例开始的。我不能100%确定这与我的客户所经历的问题完全相同,但这似乎揭示了他们所看到的相同问题

  • 启动IE
  • 浏览到站点的索引页并跳转到登录(验证失败)
  • 使用凭据登录时,Authentication()返回200 OK并具有设置的cookie响应头。然后,它会导航您并调用VerifyLogin(),然后通过。cookie在请求中被发送,并且它全部成功。后续的调用都能正常工作
  • 清除我的缓存和cookies
  • 浏览到站点的索引页并跳转到登录(验证失败)
  • 使用凭据登录时,Authentication()返回200 OK并具有设置的cookie响应头。然后它导航您并在此时调用VerifyLogin()。cookie不会在请求中传递,即使它以前是在Authentication()的响应中设置的。如果我关闭并重新打开(即它将再次工作)
  • 所以,这就像第二次设置cookie响应时没有设置cookie一样

    首先,这里是我的web.config的相关部分,以及我如何设置表单cookie

    web.config:

     1. VerifyLogin()    -> Fail: Go To Login page
                         -> Pass: Call rest of the AJAX Methods // Enter Login Credentials and submit
     2. Authentication() -> Fail: Prompt the user
                         -> Pass: set forms auth cookie and navigate back to original page, where it will call VerifyLogin() again
    
     <authentication mode="Forms">
          <forms enableCrossAppRedirects="true" name="Gator.Express.Auth" timeout="2880" />
        </authentication>
    
    下面是按顺序排列的请求和响应

    工作身份验证请求

    POST http://localhost:55733/api/Authentication HTTP/1.1
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://localhost:61496/Login.html
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    Content-Length: 35
    DNT: 1
    Host: localhost:55733
    Pragma: no-cache
    
    Username=michaelGator&Password=XXXX
    
    GET http://localhost:55733/api/VerifyLogin HTTP/1.1
    Referer: http://localhost:61496/
    Accept: */*
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    DNT: 1
    Host: localhost:55733
    Cookie: Gator.Express.Auth=0102054E17668183D208FE05CEEABA1385D208010C6D00690063006800610065006C004700610074006F007200377B002200530073006F004100630063006F0075006E0074004900640022003A002200300030003000300030003000300030002D0030003000300030002D0030003000300030002D0030003000300030002D0030003000300030003000300030003000300030003000300022007D00012F00FF
    
    #工作身份验证响应

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    Set-Cookie: Gator.Express.Auth=01020FCCF4658183D208FE0F4CC8BA1385D208000C6D00690063006800610065006C004700610074006F00720000012F00FF; path=/; HttpOnly
    Set-Cookie: Gator.Express.Auth=0102054E17668183D208FE05CEEABA1385D208010C6D00690063006800610065006C004700610074006F007200377B002200530073006F004100630063006F0075006E0074004900640022003A002200300030003000300030003000300030002D0030003000300030002D0030003000300030002D0030003000300030002D0030003000300030003000300030003000300030003000300022007D00012F00FF; expires=Sun, 05-Jul-2015 08:28:39 GMT; path=/; HttpOnly
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcQXV0aGVudGljYXRpb24=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:28:39 GMT
    Content-Length: 14
    
    "michaelGator"
    
    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcVmVyaWZ5TG9naW4=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:28:39 GMT
    Content-Length: 0
    
    #正在验证登录请求

    POST http://localhost:55733/api/Authentication HTTP/1.1
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://localhost:61496/Login.html
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    Content-Length: 35
    DNT: 1
    Host: localhost:55733
    Pragma: no-cache
    
    Username=michaelGator&Password=XXXX
    
    GET http://localhost:55733/api/VerifyLogin HTTP/1.1
    Referer: http://localhost:61496/
    Accept: */*
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    DNT: 1
    Host: localhost:55733
    Cookie: Gator.Express.Auth=0102054E17668183D208FE05CEEABA1385D208010C6D00690063006800610065006C004700610074006F007200377B002200530073006F004100630063006F0075006E0074004900640022003A002200300030003000300030003000300030002D0030003000300030002D0030003000300030002D0030003000300030002D0030003000300030003000300030003000300030003000300022007D00012F00FF
    
    #正在验证登录响应

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    Set-Cookie: Gator.Express.Auth=01020FCCF4658183D208FE0F4CC8BA1385D208000C6D00690063006800610065006C004700610074006F00720000012F00FF; path=/; HttpOnly
    Set-Cookie: Gator.Express.Auth=0102054E17668183D208FE05CEEABA1385D208010C6D00690063006800610065006C004700610074006F007200377B002200530073006F004100630063006F0075006E0074004900640022003A002200300030003000300030003000300030002D0030003000300030002D0030003000300030002D0030003000300030002D0030003000300030003000300030003000300030003000300022007D00012F00FF; expires=Sun, 05-Jul-2015 08:28:39 GMT; path=/; HttpOnly
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcQXV0aGVudGljYXRpb24=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:28:39 GMT
    Content-Length: 14
    
    "michaelGator"
    
    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcVmVyaWZ5TG9naW4=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:28:39 GMT
    Content-Length: 0
    
    下面是一组无效的请求和响应。注意,身份验证方法返回一个200OK和一个set cookie命令,但在下一个verify登录调用中,coookie消失了

    #身份验证请求-按应返回,但属于非工作请求集的一部分

    POST http://localhost:55733/api/Authentication HTTP/1.1
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://localhost:61496/Login.html
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    Content-Length: 35
    DNT: 1
    Host: localhost:55733
    Pragma: no-cache
    
    Username=michaelGator&Password=XXXX
    
    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    Set-Cookie: Gator.Express.Auth=01022054EB9B8183D208FE20D4BEF01385D208000C6D00690063006800610065006C004700610074006F00720000012F00FF; path=/; HttpOnly
    Set-Cookie: Gator.Express.Auth=01028447109C8183D208FE84C7E3F01385D208010C6D00690063006800610065006C004700610074006F007200377B002200530073006F004100630063006F0075006E0074004900640022003A002200300030003000300030003000300030002D0030003000300030002D0030003000300030002D0030003000300030002D0030003000300030003000300030003000300030003000300022007D00012F00FF; expires=Sun, 05-Jul-2015 08:30:10 GMT; path=/; HttpOnly
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcQXV0aGVudGljYXRpb24=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:30:10 GMT
    Content-Length: 14
    
    "michaelGator"
    
    #身份验证响应-返回它应该返回的内容,但属于非工作请求集的一部分

    POST http://localhost:55733/api/Authentication HTTP/1.1
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://localhost:61496/Login.html
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    Content-Length: 35
    DNT: 1
    Host: localhost:55733
    Pragma: no-cache
    
    Username=michaelGator&Password=XXXX
    
    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    Set-Cookie: Gator.Express.Auth=01022054EB9B8183D208FE20D4BEF01385D208000C6D00690063006800610065006C004700610074006F00720000012F00FF; path=/; HttpOnly
    Set-Cookie: Gator.Express.Auth=01028447109C8183D208FE84C7E3F01385D208010C6D00690063006800610065006C004700610074006F007200377B002200530073006F004100630063006F0075006E0074004900640022003A002200300030003000300030003000300030002D0030003000300030002D0030003000300030002D0030003000300030002D0030003000300030003000300030003000300030003000300022007D00012F00FF; expires=Sun, 05-Jul-2015 08:30:10 GMT; path=/; HttpOnly
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcQXV0aGVudGljYXRpb24=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:30:10 GMT
    Content-Length: 14
    
    "michaelGator"
    
    #非工作验证登录请求-注意,没有cookie被拒绝

    GET http://localhost:55733/api/VerifyLogin HTTP/1.1
    Referer: http://localhost:61496/
    Accept: */*
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    DNT: 1
    Host: localhost:55733
    
    HTTP/1.1 401 Unauthorized
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcVmVyaWZ5TG9naW4=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:30:10 GMT
    Content-Length: 71
    
    {"$id":"1","Message":"Authorization has been denied for this request."}
    
    #非工作VerifyLogin响应-由于没有传递表单Cookie而失败

    GET http://localhost:55733/api/VerifyLogin HTTP/1.1
    Referer: http://localhost:61496/
    Accept: */*
    Accept-Language: en-GB
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Connection: Keep-Alive
    DNT: 1
    Host: localhost:55733
    
    HTTP/1.1 401 Unauthorized
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 4.0.30319
    X-SourceFiles: =?UTF-8?B?QzpcV29ya2luZ1xnYXRvci5nYXRvcndlYnNlcnZpY2VcU291cmNlXEdhdG9yV2ViU2VydmljZVxhcGlcVmVyaWZ5TG9naW4=?=
    Access-Control-Allow-Origin: http://localhost:61496
    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, token
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Date: Fri, 03 Jul 2015 08:30:10 GMT
    Content-Length: 71
    
    {"$id":"1","Message":"Authorization has been denied for this request."}
    
    有人对此有什么想法吗

  • 为什么响应发送两个具有相同cookie名称的
    SetCookie
    头?这似乎是错误和混乱的

  • 注意不要在cookies中给IE提供太多数据。你的cookie值很长!cookie限制为~4k。这是您的域的总cookies数。如果超过那个时间(就不寄了)


  • HTH

    您似乎得到了两个身份验证cookie,这表明您的实现与ASP.Net试图为您自动化的东西发生了冲突

    有一种方法可以创建和设置cookie,我认为这已经应用,因此:

  • FormsAuthentication.SetAuthCookie
    获取cookie(已在同一响应中设置)
  • 您的
    SetAuthenticationCookie
    将触发
  • 这将调用
    FormsAuthentication.GetAuthCookie
    并处理(将JSON序列化数据嵌入到新的cookie中)原始数据
  • 您可以调用
    HttpContext.Current.Response.Cookies.Add来创建第二个cookie
  • 两个cookie都以相同的名称在标头中传递
  • 您尚未清除原始cookie,并且.Net不知道如何处理您处理的cookie

    我认为你有两个选择:

  • 将JSON数据拆分为一个具有不同名称的完全独立的cookie
  • 从头开始滚动您自己的Cookie,不要使用.Net的任何
    表单验证方法
  • 我个人认为前者是最简单、最快的实现方法

    也许还值得尝试一下cookie名称——我不确定所有浏览器都支持cookie名称中的句点,但它们都区分大小写


    最后,还有一些值得检查的地方——这几乎是,因为IIS将URL视为不区分大小写,但浏览器都将cookie名称视为区分大小写。

    还有一个想法——使用浏览器工具检查为您的域存储了哪些cookie。确保IE确实存储了您希望发送回的cookies我已将此标记为答案,让声誉消失在乙醚中似乎很愚蠢。不幸的是,由于工作的需要,我只有很少的时间来测试它,这需要对我们的实时代码环境进行更新才能正确地解决。这显然是最合理的,也是最详细的答案,所以请享受赏金吧