我对Express返回浏览器的sessionID有一些问题。对于连续请求,不会传回收到的cookie,因此会为每个请求生成一个新会话。无法维护登录状态。
这个问题似乎只发生在低于Win10左右的操作系统IE11及以下(例如:Win7上的IE11)。 Edge,Chrome,Safari,FF ......没问题。
更多背景信息: 我们有两个应用程序,例如one.example.com和two.example.com。对于来自两个应用程序的请求,应该跟踪登录用户。 可在two.example.com上访问的MEAN堆栈返回set-cookie标头一天,仅限HTTP,域名为' .example.com'在路径' /'。
当我加载一个包含10个资源的页面时,所有这些请求都会收到sessionID的新cookie。即使在连续页面加载。 cookie永远不会返回给服务器。
来自Chrome的HTTP跟踪:
GET http://localhost:3000/
HTTP/1.1 200 OK
set-cookie: test=123
set-cookie: webSessionId=s%3Av6R-...
GET http://localhost:3000/lib/bootstrap/dist/css/bootstrap.css
Cookie: test=123; webSessionId=s%3Av6R-...
HTTP/1.1 200 OK
Set-Cookie: test=123
看到Chrome返回会话,第二次请求不会发送快递
来自IE的HTTP跟踪: 对第一个请求的资源的响应 请求第二个资源 对第二个请求资源的响应
test123是我在每个请求上设置的硬编码cookie(无论是否已经返回)...使用res.setHeader('Set-Cookie', 'test=123');
。有一次,我正在研究一个“套装饼干”和“#39;和' Set-Cookie' (可以在上面的截图中看到),但这似乎不会影响IE。
所以,一旦我提供域名,我就开始使用其他cookie属性(有效期限,域名,路径,安全和仅限http)... IE不会返回测试cookie。 在我们的设置' .example.com'真的是一个要求。域不包含下划线(_)。在dev&它确实包含一个连字符" two-dev.example.com"。但是在prd(two.example.com)上也存在IE(11)问题。
任何人都知道为什么IE拒绝使用域名返回cookie? 这个sh * t正在推动我香蕉
使用:express 4.13.1;快递会议1.11.3; cookie-parser 1.3.2
答案 0 :(得分:0)
我认为我找到了原因......我们使用的域名是双字母域名,例如one.xx.yy
& two.xx.yy
。因此,将Cookie的Domain-part设置为.xx.yy
会导致IE忽略cookie,我会重新调整。
任何人都可以确认此问题在IE11上仍然有效吗?
和/或如何规避这个?除了明显使用其他域名外。