- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
通常情况下,浏览器的安全策略(比如同源策略 Same-Origin Policy)会阻止 Cookie 跨域共享,这是为了保护用户隐私和防止跨站攻击。但实际上,通过一些特殊的配置和手段,我们是可以在特定条件下实现跨域共享 Cookie 的。
1. 设置 Cookie 的 SameSite 属性:
SameSite 属性决定了 Cookie 是否会随着跨站请求一起发送。它有三个常见的值:
Strict:严格模式,只允许同源请求发送 Cookie,跨域请求不会发送。
Lax:默认值,允许部分跨域请求(例如,用户点击链接跳转时)发送 Cookie。
None:不做限制,允许所有跨域请求发送 Cookie,但必须配合 Secure 属性(也就是说,必须在 HTTPS 下有效)。
例如:
Set-Cookie: sessionId=abc123; SameSite=None; Secure
注意:如果设置了 SameSite=None,那么必须同时设置 Secure,否则浏览器会拒绝发送这个 Cookie。
2. 跨域共享 Cookie 的几种方案:
2.1 使用顶级域名共享:
如果两个子域名属于同一个顶级域名(例如 a.example.com 和 b.example.com),可以通过设置 Cookie 的 Domain 属性来实现共享: Set-Cookie: sessionId=abc123; Domain=.example.com; Path=/
这样,example.com 下的所有子域名都能访问这个 Cookie。
2.2 通过服务器代理:
一种常见的跨域方式是让前端通过同源的服务器代理请求到跨域的 API。比如,前端向自己的域名下的 /api 发送请求,服务器再将请求代理到目标 API 地址。这样,浏览器会认为请求来自同一域名,从而避开跨域限制。
3. CORS + Cookie 跨域配置:
要想在跨域请求时携带 Cookie,客户端和服务器都需要进行相应的配置:
客户端配置:
fetch('https://www.landui.com/data', {
credentials: 'include' // 强制请求时带上 Cookie
});
服务器配置(跨域 API 的响应头):
Access-Control-Allow-Origin: https://www.landui.com
Access-Control-Allow-Credentials: true
注意:Access-Control-Allow-Origin 不能设置为 *,必须明确指定来源;而 Access-Control-Allow-Credentials: true 表示允许携带 Cookie。
4. JSONP(已过时):
以前,JSONP 被用作跨域请求的解决方案,能够实现跨域数据共享,但仅限于 GET 请求。现在这种方式已经过时,不再推荐使用。
5. 风险与安全性:
跨域共享 Cookie 存在一定的安全风险,尤其是在涉及用户身份认证时。为了保证安全性,建议:
尽量使用 HTTPS 协议来加密传输。
设置 Cookie 的 HttpOnly 和 Secure 属性,避免 Cookie 被 JavaScript 访问或通过非安全渠道泄漏。
使用 SameSite 来控制 Cookie 的跨站行为。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码
TOP