关于Ember Cookie与Server Cookie的技术疑问咨询
首先帮你梳理下当前场景:你已经将Ember的存储配置为Cookie类型,服务器返回了如下Set-Cookie响应头:
Set-Cookie: dejavu.session=WwwLQjdfOoNz_-bhyYpBLvzew7IUaJuu; Path=/; Expires=Mon, 28-May-2018 15:59:30 GMT
但你在Chrome开发者工具里只看到Ember Simple Auth生成的Cookie,没找到服务器发送的dejavu.session Cookie,接下来针对你的两个疑问逐一解答:
疑问1:服务器发送的Cookie是否应与Ember Simple Auth设置的Cookie分开显示?还是需嵌入到Ember Cookie中?
它们完全是分开显示的,这是两个独立的Cookie:
- Ember Simple Auth的Cookie(默认名称一般是
ember_simple_auth-session)是由你的Ember前端代码设置的,用来存储前端的会话状态; - 服务器发送的
dejavu.sessionCookie是通过HTTP响应头Set-Cookie由后端设置的,属于浏览器直接管理的服务器会话Cookie。
你没看到服务器Cookie的话,可以排查这几个点:
- 确认Chrome开发者工具的Cookie面板是否选中了当前域名:有时候会不小心切换到其他域名的Cookie列表,或者开启了过滤条件;
- 检查Cookie路径匹配:你的Cookie路径是
/,只要当前页面路径在/下就应该能看到,若应用在子路径下,需确认路径是否匹配; - 有没有跨域场景?如果Ember应用和后端API不在同一域名下,需要后端配置
SameSite(比如SameSite=Lax或SameSite=None; Secure,HTTPS场景)、Domain等属性,否则浏览器可能不会存储这个Cookie。
绝对不需要把服务器Cookie嵌入到Ember Simple Auth的Cookie里,两者是独立的会话管理载体。
疑问2:Ember Cookie为Ember的存储载体,服务器Cookie由浏览器捕获并在后续请求中携带,该理解是否正确?
你的理解基本正确,再补充几个关键细节:
- 浏览器自动捕获
Set-Cookie的前提是符合浏览器Cookie规则:比如同源策略(或跨域时配置了正确的Cookie属性)、没有被浏览器隐私设置(比如第三方Cookie拦截)阻止; - 浏览器后续自动携带Cookie的场景是:请求的域名、路径符合该Cookie的
Domain和Path属性;如果Cookie设置了HttpOnly,前端JS无法读取,但依然会自动携带到请求头里; - 服务器Cookie的处理确实不需要Ember Simple Auth做额外配置——除非你的Ember应用认证逻辑需要主动读取这个服务器Cookie(但一般不建议,若为
HttpOnly前端根本读不到);如果只是后端用这个Cookie验证会话,浏览器会自动完成携带动作,Ember这边无需额外配置。
内容的提问来源于stack exchange,提问作者omair azam
相关产品推荐
相关产品推荐

