CodeIgniter4基础教程:Cookie与跨域设置

老芳君_2973

老芳君_2973

2026-08-08

645人浏览

原创

CodeIgniter 4 安全创建和发送 Cookie 需显式配置 secure=false(开发环境)、cookie_path='/’,并用 $response->setCookie() 发送;跨域预检需 CorsFilter 返回 200 并设全量 CORS 头;Vite 代理需 changeOrigin: true 且前端请求用 /api 路径。

codeigniter4基础教程:cookie与跨域设置

CodeIgniter 4 怎么安全创建和发送 Cookie

CI4 的 Cookie 类不是简单 setcookie() 封装,它默认启用 Secure、HttpOnly 和 SameSite=Lax,但这些行为必须匹配实际部署环境,否则 Cookie 在浏览器里根本不会被存储或发送。

  • 开发时若用 http://localhost(非 HTTPS),必须显式关掉 secure:传入 ['secure' => false],否则 Chrome/Firefox 直接忽略该 Cookie
  • cookie_path 必须设为 '/',尤其在多语言子路径(如 /zh/)场景下;设成 '/zh/' 会导致切换语言后 Cookie 不随请求发出
  • 若前端带凭证(如 fetch(..., { credentials: 'include' })),后端响应必须含 Access-Control-Allow-Credentials: true,且此时 Access-Control-Allow-Origin 不能是 *,得写死前端域名(如 http://localhost:5173)
  • 用 cookie() 辅助函数创建 Cookie 时,它只构造对象,不自动发送;必须配合 $response->setCookie($cookie) 才生效

为什么 CI4 跨域请求总卡在 OPTIONS 预检

这不是 CI4 的 bug,而是浏览器强制执行的 CORS 预检机制 —— 只要请求含自定义头(如 Authorization)、非简单方法(如 PUT)、或 Content-Type 为 application/json,就先发一个 OPTIONS 请求试探后端是否允许。CI4 默认不处理 OPTIONS,直接 404 或 500,前端就卡住。

  • 最稳做法:写个 CorsFilter,在 app/Filters/CorsFilter.php 里对 OPTIONS 请求直接返回 200,并设置 Access-Control-Allow-Methods、Access-Control-Allow-Headers 等头
  • 别在控制器里手动 header(),因为 CI4 响应生命周期中,header() 可能被后续中间件覆盖或触发“headers already sent”错误
  • Access-Control-Allow-Headers 必须明确列出前端实际用的头,比如 Authorization,X-Requested-With,Content-Type;写 * 在带凭据时无效
  • 生产环境别留 Access-Control-Allow-Origin: *,它和 credentials: true 冲突,浏览器会直接拒绝响应

Vite 开发时怎么让 /api 请求不跨域

本地开发阶段,代理比改后端 CORS 更干净——浏览器根本不知道有跨域这回事,所有请求都发给 http://localhost:5173(Vite 地址),Vite 自动把 /api/ 开头的请求转发到 CI4(比如 http://localhost:8000)。

NotebookLM CLI Cookies
NotebookLM CLI Cookies

使用 nlm CLI 检索并回答已上传至 NotebookLM 的文档问题。适用于用户需要查找信息、总结来源或查询特定笔记本时。

下载
  • Vite 配置里 server.proxy 必须设 changeOrigin: true,否则 CI4 收到的 Host 头还是 localhost:5173,可能触发域名白名单拦截
  • 前端代码里所有 API 路径写相对路径:axios.get('/api/users'),而不是 axios.get('http://localhost:8000/api/users')
  • CI4 启动命令别用 php spark serve 绑定 127.0.0.1,改用 php spark serve --host 0.0.0.0,否则 Vite 代理连不到
  • 代理只在开发生效,打包后的 dist 目录上线必须配 Nginx 反向代理,否则静态资源和 API 会分属不同域名

CI4 控制器里怎么读取和验证 Cookie

CI4 的 $this->request->getCookie() 只读原始值,不校验签名;真正安全的读取方式是用 $this->response->getCookie() 或服务容器里的 Cookie 实例,它们会自动校验 __ci_last_regenerate 和加密签名。

  • 不要用 $_COOKIE['xxx'] 直接读,它绕过 CI4 的加密/签名机制,容易被篡改
  • 若 Cookie 是用 cookie()->withValue(...)->withPrefix('__Secure-') 创建的,读取时必须用相同 prefix:$this->request->getCookie('remember_token', '__Secure-')
  • CSRF token 默认也存在 Cookie 里(csrf_cookie_name),前后端分离时,前端需在请求头带上这个值:headers: { 'X-CSRF-TOKEN': cookieValue },CI4 才会放行 POST/PUT/DELETE
  • Cookie 过期时间由服务端控制,但浏览器也可能因隐私策略(如 Safari ITP)提前丢弃第三方 Cookie,别依赖它做长期登录态

跨域和 Cookie 的坑不在配置项本身,而在它们之间的隐性耦合:credentials 开关、SameSite 策略、Secure 标志、甚至前端 fetch 的 mode 选项,任意一环没对齐,整条链就断。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

12239

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

1206

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

844

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1926

14

PHP CodeIgniter框架
PHP CodeIgniter框架

本专题专注于 PHP 轻量级框架 CodeIgniter 的学习与应用,系统讲解 MVC 模型、路由与控制器、数据库操作、表单验证、安全机制以及 REST API 开发。通过博客系统、内容管理平台和小型电商等实战项目,帮助学员快速掌握 CodeIgniter 的开发方法与实践技能。

2025.08.28

3779

16

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

120

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程