internet-explorer - Cookie无法在IE中更新/覆盖

标签 internet-explorer cakephp cookies http-headers

我在IE中有一个奇怪的古怪的Cookie。当用户登录网站时,我正在生成一个新的 session ID,因此需要覆盖cookie。流程基本上是:

  • 客户端转到https://secure.example.com/users/login页面,自动接收 session ID
  • 客户端将登录凭据过帐到相同的地址
  • 客户端接收以下set-cookie header 以及302重定向到https://secure.example.com/users/mypage:

    CAKEPHP=deleted; expires=Sun, 05-Apr-2009 04:50:35 GMT; path=/
    CAKEPHP=98hnIO23...; expires=Mon, 12 Apr 2010 04:50:36 GMT; path=/; secure

  • 客户端应该访问https://secure.example.com/users/mypage,并提供新的 session ID。

  • 此功能适用于除IE(已在7和8中测试)以外的所有浏览器。 IE会保留未经身份验证的旧 session ID,然后重定向回登录页面。它适用于我的本地测试环境(使用https://localhost:8443/...上的自签名证书),但不适用于实时服务器。

    我使用的是CakePHP,只需发出$this->Session->renew(),它会产生上述cookie头。

    任何想法如何使IE接受新的cookie?

    这是完整的标题:
    HTTP/1.0 302 Moved Temporarily
    Date: Thu, 08 Apr 2010 02:54:30 GMT
    Server: Apache
    Expires: Mon, 26 Jul 1997 05:00:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
    Set-Cookie: CAKEPHP=deleted; expires=Wed, 08-Apr-2009 02:54:30 GMT; path=/
    Set-Cookie: CAKEPHP=d55c...; expires=Thu, 15 Apr 2010 02:54:31 GMT; path=/; secure
    Last-Modified: Thu, 08 Apr 2010 02:54:30 GMT
    Location: https://secure.example.com/users/mypage
    Vary: Accept-Encoding
    Content-Length: 0
    Connection: close
    Content-Type: text/html; charset=utf-8
    

    我想我已经发现了问题:
    IE会发送两个同名的Cookie。这是对服务器的下一个请求:
    GET /users/mypage HTTP/1.1
    Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, */ *
    Referer: https://secure.example.com/users/login
    Accept-Language: en-gb
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)
    Accept-Encoding: gzip, deflate
    Host: secure.example.com
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: CAKEPHP=19c6...; CAKEPHP=d55c...
    

    请注意,它发送两个cookie,一个是登录后收到的cookie,另一个是旧的cookie。它在主页example.com上收到了旧的,并设置了path=/。它还会将其发送给secure.example.com请求。它不会被上述标题替换,而是将其添加为其他cookie。我该如何阻止它呢?

    最佳答案

    确保为您的基本域发出了cookie。

    这很可能是问题所在,因为这种行为在不同的浏览器中肯定会有所不同。

    我还没有在cakephp中做到这一点,但是this should work

    关于internet-explorer - Cookie无法在IE中更新/覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2577026/

    相关文章:

    javascript - SVG 图像不会出现在 IE 11 上

    CSS 悬停图像链接在 Internet Explorer 中不起作用

    session - 使用特定 id 手动启动 session /在域之间转换 session cookie

    c# - ASP.NET 中的 Request.Browser.Cookies 属性有多可靠?

    javascript - 表格行的 Chrome Javascript 问题

    c# - 从 C# 在现有 IE 窗口的选项卡中启动 URL

    cakephp - 按值递增 Cakephp 数据库字段

    php - 比 CakePHP 中的 -1 递归手动连接更好的检索 HABTM、HasMany...等数据的方法?

    c# - 无法读取cookie

    java - Android httpclient cookie拒绝非法路径属性