news 2026/4/15 17:39:21

HoRain云--跨域Cookie设置全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--跨域Cookie设置全攻略

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

如何使用CORS来允许设置Cookie

一、关键配置条件

二、服务器端配置

1. Node.js (Express) 示例

2. PHP 示例

3. Next.js 中间件配置

三、客户端配置

1. Fetch API

2. XMLHttpRequest

3. Axios

四、Cookie属性要求

五、常见问题解决

1. 错误:Access-Control-Allow-Origin 不能为通配符 *

2. Cookie未随请求发送

3. 预检请求(OPTIONS)失败

六、重要注意事项


如何使用CORS来允许设置Cookie

要实现跨域请求中携带和设置Cookie,需要正确配置CORS(跨源资源共享)的服务器端和客户端。以下是完整指南:

一、关键配置条件

要成功实现跨域Cookie传递,必须同时满足以下三个条件:

  1. 服务器端:设置Access-Control-Allow-Credentials: true
  2. 服务器端:指定具体域名(不能使用*):Access-Control-Allow-Origin: http://your-domain.com
  3. 客户端:设置withCredentials: true

二、服务器端配置

1. Node.js (Express) 示例

app.use(function(req, res, next) { // 必须指定具体域名,不能使用通配符 * res.header('Access-Control-Allow-Origin', 'http://your-frontend-domain.com'); // 允许携带凭证(包括Cookie) res.header('Access-Control-Allow-Credentials', true); // 允许的请求方法 res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); // 允许的请求头 res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); next(); });

2. PHP 示例

<?php // 允许特定域名的跨域请求 header("Access-Control-Allow-Origin: http://your-frontend-domain.com"); // 允许包含cookie header("Access-Control-Allow-Credentials: true"); // 允许的请求方法 header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE"); // 允许的请求头 header("Access-Control-Allow-Headers: Content-Type, Authorization"); // 处理预检请求(OPTIONS) if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE"); header("Access-Control-Allow-Headers: Content-Type, Authorization"); exit; }

3. Next.js 中间件配置

// middleware.ts import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' export function middleware(request: NextRequest) { const response = NextResponse.next() // 设置CORS头 response.headers.set('Access-Control-Allow-Origin', 'https://your-frontend-domain.com') response.headers.set('Access-Control-Allow-Credentials', 'true') response.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') response.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization') // 处理预检请求 if (request.method === 'OPTIONS') { return new Response(null, { status: 200, headers: response.headers }) } return response } export const config = { matcher: '/api/:path*' }

三、客户端配置

1. Fetch API

fetch('https://your-api-domain.com/data', { credentials: 'include' // 关键:允许发送Cookie }) .then(response => response.json()) .then(data => console.log(data));

2. XMLHttpRequest

const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://your-api-domain.com/data', true); xhr.withCredentials = true; // 关键:允许发送Cookie xhr.send();

3. Axios

axios.get('https://your-api-domain.com/data', { withCredentials: true // 关键:允许发送Cookie }) .then(response => console.log(response.data));

四、Cookie属性要求

服务器设置Cookie时,必须满足以下条件:

  1. 必须启用Secure属性(通过HTTPS传输):

    Set-Cookie: sessionId=abc123; Secure; SameSite=None; Path=/
  2. 必须设置SameSite=None

    Set-Cookie: sessionId=abc123; Secure; SameSite=None; Path=/
  3. 避免使用HttpOnly(如需前端JavaScript读取Cookie):

    Set-Cookie: sessionId=abc123; Secure; SameSite=None; Path=/; HttpOnly

五、常见问题解决

1. 错误:Access-Control-Allow-Origin 不能为通配符 *

原因:当启用Access-Control-Allow-Credentials: true时,Access-Control-Allow-Origin必须明确指定域名。

解决:使用具体域名或动态验证Origin

const allowedOrigins = ['http://your-frontend-domain.com', 'https://admin.your-frontend.com']; const origin = request.headers.get('origin'); if (allowedOrigins.includes(origin)) { res.setHeader('Access-Control-Allow-Origin', origin); }

2. Cookie未随请求发送

检查点

3. 预检请求(OPTIONS)失败

解决:确保服务器正确处理OPTIONS请求并返回CORS头

六、重要注意事项

  1. 必须使用HTTPS:当设置SameSite=None时,Cookie必须通过HTTPS传输
  2. 避免使用通配符:当启用凭证时,Access-Control-Allow-Origin不能为*
  3. 安全最佳实践:使用动态Origin验证,而不是硬编码特定域名

通过以上配置,你可以在跨域请求中正确设置和传递Cookie,实现跨域认证和用户状态保持。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 13:37:15

通信原理篇---常见的几种部分响应

让我们用「声音接力游戏」来彻底搞懂这几类部分响应。这个比喻会让你瞬间理解它们的区别和妙处。核心比喻&#xff1a;声音接力游戏想象一个游戏&#xff1a;一排人站好&#xff0c;第一个人要悄悄传递一串数字&#xff08;比如 1 0 1 1&#xff09;给最后一个人。规则限制&…

作者头像 李华
网站建设 2026/4/15 14:53:01

通信原理篇---第二类部分响应的预编码和相关编码

我们用「带负号的声音接力」这个游戏来彻底搞懂第四类部分响应的预编码和相关编码。这个类比会让你发现它和第一类的精妙差异。核心比喻&#xff1a;带负号的猜数游戏这次的游戏规则变了&#xff0c;更奇特&#xff1a;新规则&#xff1a;我报出的数字 我当前的数字 - 你猜的上…

作者头像 李华
网站建设 2026/4/2 18:24:34

MySQL事务隔离级别:从并发混乱到数据一致性守护者

引言&#xff1a;一个银行系统的并发困境想象一下&#xff0c;你正在开发一个银行转账系统。当用户A向用户B转账时&#xff0c;系统需要执行两个操作&#xff1a;从A账户扣款&#xff0c;向B账户加款。在并发环境下&#xff0c;如果没有适当的控制&#xff0c;可能会发生这样的…

作者头像 李华
网站建设 2026/4/14 3:04:38

【卫星】全球导航卫星系统GNSS中的欺骗与欺骗检测算法,模拟载体在正常GNSS导航和GNSS欺骗攻击下的运动状态,通过IMU+GNSS融合定位,最终实现欺骗检测与结果分析附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

作者头像 李华
网站建设 2026/4/13 11:55:33

在Markdown文档中添加目录的方法

在Markdown文档中添加目录有多种方法&#xff0c;下面介绍几种常用的方式&#xff1a; 一、自动生成目录&#xff08;部分编辑器/平台支持&#xff09; 1. 使用 [TOC] 标记&#xff08;Typora、部分GitHub项目等&#xff09; [toc] # 标题1 ## 标题2 ### 标题32. 使用插件/扩…

作者头像 李华