node.js - NodeJS 和 Express 与 IE 的 cookie 问题

标签 node.js express subdomain session-cookies express-session

我对 Express 返回给浏览器的 sessionID 的 cookie 存在一些问题。对于连续请求,接收到的 cookie 不会被传回,因此为每个请求生成一个新 session 。无法维护登录状态。

此问题似乎仅发生在低于 Win10 左右的操作系统上的 IE11 及以下版本(例如:Win7 上的 IE11)。 Edge、Chrome、Safari、FF...没有问题。

更多背景信息: 我们有两个应用程序,例如 one.example.com 和two.example.com。对于来自两个应用程序的请求,应跟踪登录的用户。 可在 Two.example.com 上访问的 MEAN 堆栈返回一天的 set-cookie header ,仅限 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返回了session,第二个请求的express没有返回它

来自 IE 的 HTTP 跟踪: response for first requested resource 对第一个请求的资源的响应 request for second resource 请求第二个资源 response for second requested resource 对第二个请求资源的响应

test123 是我在每个请求上设置的硬编码 cookie(无论是否已返回)...通过使用 res.setHeader('Set-Cookie', 'test=123');。有一次,我正在研究“set-cookie”和“Set-Cookie”之间的区别(如上面的屏幕截图所示),但这似乎不会影响 IE。

因此,一旦我提供了一个域,我就开始尝试其他 cookie 属性(过期日期、域、路径、安全和 http)... IE 不会返回 test-cookie。 在我们的设置中,“.example.com”确实是一个要求。该域不包含下划线 (_)。在 dev & tst 中,它确实包含一个连字符“two-dev.example.com”。但 IE(11) 问题在prd(two.example.com)上也存在。

有人知道为什么 IE 拒绝返回带有域的 cookie 吗? 这狗屎让我发疯

使用:express 4.13.1;快速 session 1.11.3; cookie解析器1.3.2

最佳答案

我想我找到了原因...我们使用的域是两个字母的域,例如one.xx.yy & two.xx.yy。因此,我发现,将 cookie 的域部分设置为 .xx.yy 会导致 IE 忽略该 cookie。

谁能确认这个问题在 IE11 上仍然有效吗?

How to set cookies for two-letter domains in IE8?

和/或如何规避这个问题?除了使用其他域的明显作用之外。

关于node.js - NodeJS 和 Express 与 IE 的 cookie 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41698483/

相关文章:

javascript - Promise.resolve 是异步函数吗?

javascript - Node JS POST 请求返回未定义的正文

subdomain - 我们可以仅使用 1 个带有 SSL 的子域来运行多个 Facebook 应用程序吗?

javascript - 如何安全地保存从 auth0 登录收到的 JWT token (nodejs express)

node.js - 如何以文本形式发送变量?

php - 跨(子域?)维护 Assets 的最佳实践

.htaccess - htaccess 子域 ssl 通配符无法打开文件

node.js - 在 Node.JS 中是否有管理简单博客的模块?

python - Tensorflow 服务客户端/Base64 问题/错误 3

javascript - 在 Controller 中发出 HTTP 请求 - sails.js