Internet Explorer 11不会在站点上设置cookie

时间:2014-03-27 14:08:41

标签: internet-explorer cookies internet-explorer-11

出于某种原因IE11(仅IE11,与其他IE9和IE10一起测试)不会在我一直在工作的网站上创建会话。所以这意味着诸如站点登录之类的基本功能将无效。

在其他浏览器上,这是完美的。

我研究了一下,发现IE不适用于带有下划线的域名但是我的域名没有,所以可能是什么问题? 谢谢!

11 个答案:

答案 0 :(得分:24)

IE 11不喜欢cookie中的域值。把它留空。

IE 11错误:

Set-Cookie: kohanasession=foobar; expires=Tue, 09-Apr-2016 01:01:01 GMT; path=/; domain=tc.mk; httponly

正确使用IE 11:

Set-Cookie: kohanasession=foobar; expires=Tue, 09-Apr-2016 01:01:01 GMT; path=/; httponly

答案 1 :(得分:6)

我知道这已经过时了,但希望这有助于将来的某些人。 IE11中的cookie中不能包含空白expires=;值。您只需完全退出expires字段。

答案 2 :(得分:4)

这可能只适用于其他域Cookie,但如果有人通过Google发现此内容(就像我一样),这可能有所帮助。

IE11可能不会根据其隐私设置设置Cookie。

这对我有用:

enter image description here

(互联网选项 - >隐私权 - >高级 - >启用所有Cookie案例)

答案 3 :(得分:1)

我最近自己遇到过这个问题。就我而言,问题是由执行" ClearAuthenticationCache"成功登录后命令。执行该命令以删除HTTP身份验证,但事实证明它也会删除会话cookie。

所以我建议删除" ClearAuthenticationCache"如果您在登录后执行它,请致电。

document.execCommand("ClearAuthenticationCache");

有关详细信息,请参阅以下链接:https://blogs.msdn.microsoft.com/ieinternals/2010/04/04/understanding-session-lifetime/

答案 4 :(得分:1)

我遇到了这个问题,因为我正在运行单页Vue应用程序。我将cookie设置为一条路由,然后立即路由到另一个“页面”。但是,似乎 IE直到下一页加载之前,IE才会发送Cookie 。因此,我不得不使用浏览器重新加载页面,而不是使用pushState。

答案 5 :(得分:0)

查看服务器发送的cookie到期日期似乎是昨天。是否在服务器上正确设置了日期时间?

答案 6 :(得分:0)

您正在设置其中一个会话Cookie两次: Set-Cookie: PHPSESSID=3iv5l4tn2ugkbf4vt09lilsi06; path=/ Set-Cookie: identity=1468380643; expires=Mon, 09-Jan-2017 12:31:46 GMT; path=/; domain=.tc.mk; httponly Set-Cookie: kohanasession=u5rrhtaj731h3p9s44jhp0k612; expires=Tue, 09-Feb-2016 12:31:46 GMT; path=/; domain=tc.mk; HttpOnly Set-Cookie: kohanasession=u5rrhtaj731h3p9s44jhp0k612; expires=Tue, 09-Feb-2016 12:31:46 GMT; path=/; domain=tc.mk; httponly

互联网资源管理器不会在连续的通话中重新发送此Cookie信息,而例如Chrome会选择其中一项“kohanasession”'。尝试发送' kohanasession'只有一次。

您在Cookie中设置的域名也是' tc.mk',而您有重定向到www.tc.mk的SEO。我认为IE在这种情况下不会使用cookie作为www。尝试将其配置为www.tc.mk

答案 7 :(得分:0)

正如Martin Beeby建议的那样,请检查您的cookie和&在服务器上正确设置日期时间。

我已检查过您网站的会话&甚至连铬都似乎过期了。

enter image description here

似乎有一些关于cookie创建/到期日期和问题的问题。 IE的行为与基于chrome的浏览器不同。不同的cookie有不同的时间。

答案 8 :(得分:0)

我在使用其他设置时遇到了类似的问题,我想分享一下问题所在以及如何解决。希望它将为遭受苦难的人们提供解决方案的想法。

设置

  1. 身份验证服务,用于设置位于 some-domain.com
  2. 上的身份验证Cookie
  3. 由Webpack Server捆绑并在 localhost
  4. 上运行的应用程序
  5. 请求通过Webpack代理进入 some-domain.com 。例如
  '/api/': {
    target: 'some-domain.com',
    logLevel: 'debug',
    secure: false,
    changeOrigin: true,
    pathRewrite: {
    '^/api': '/api'
    }
  }

问题#1

由于我的身份验证服务在 some-domain.com 上设置了Cookie,而我的React App在 localhost 上运行,因此该请求未附加该Cookie ,而我的身份验证流程失败。

解决方案

我不得不重写cookie域,所以我将这一行添加到了webpack的代理配置中

    cookieDomainRewrite: {
      '.some-domain.com': 'localhost'
    }

在webpack.config.js中看起来像这样

  devServer: {
    ...
    proxy: {
      '/api/': {
        target: 'some-domain.com',
        logLevel: 'debug',
        secure: false,
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/api'
        },
        cookieDomainRewrite: {
          '.some-domain.com': 'localhost'
        }
      }
    }
    ...
  }

所以这在chrome,firefox上还可以...但是在IE 11中已损坏。

由于该线程先前的帖子中提到的原因,IE 11不支持域 localhost ,所以当重写发生时,cookie将丢失。

我最后要做的更改是

   cookieDomainRewrite: {
      '.some-domain.com': null
    }

这将使域默认为localhost,同时保持其对IE 11的有效性。

总结

使用Cookie和IE时,请确保:

  1. 您的客户端和服务器的域匹配
  2. 如果使用本地主机,则将null用作域值

答案 9 :(得分:0)

为了使cookie持久性功能能够按预期在IE11中正常工作,我发现必须使用toGMTString()方法(我尝试了toGMTString()和toUTCString())用于过期创建Cookie时的字段。在添加此代码之前,cookie将在关闭浏览器后不再存在。

示例:

var expiryDate = new Date();
expiryDate.setTime(expiryDate.getTime() + (3650 * 24 * 60 * 60 * 1000));
document.cookie = 'name=value' + '; expires=' + expiryDate.toGMTString() + ';path=/'; 

答案 10 :(得分:0)

我上下搜索,但找不到解决我问题的方法。调试后,我意识到IE(与其他浏览器不同)需要PATH部分以'/'来 start 。我有我的行“ subdir /”,并且必须将其前缀为“ / subdir /”才能满足IE的要求。