讲师中心 微信公众号
AI工具推荐 视频效率加速

Echo框架Cookie加密存储的实现技巧

梦杰姑娘_8841

梦杰姑娘_8841

发布时间:2026-11-03 09:00:12

|

268人浏览过

|

来源于php中文网

原创

Cookie加密必须用gorilla/securecookie,因Echo.Context.SetCookie()仅写明文;需用32字节密钥初始化securecookie.Codecs,设HttpOnly、Secure、SameSite三属性,并正确处理ErrMacInvalid等解码错误。

echo框架cookie加密存储的实现技巧

Cookie 加密必须用 securecookie,不能靠自己拼接

Echo 本身不提供 Cookie 加密能力,echo.Context.SetCookie() 写入的是明文;若需加密(比如存用户 ID、角色等敏感字段),必须引入 gorilla/securecookie 或类似库手动加解密。常见错误是把加密逻辑写在 handler 里、用 base64.StdEncoding.EncodeToString() 或简单 XOR 处理——这些既不防篡改也不防重放,浏览器拿到原始 Cookie 后可随意解码修改。

正确做法是:初始化一个 securecookie.Codecs 实例,传入至少 32 字节的密钥(crypto/rand.Read() 生成),并显式指定哈希和块加密算法:

var cookieHandler = securecookie.New(
    securecookie.GenerateRandomKey(32), // Auth key
    securecookie.GenerateRandomKey(32), // Encrypt key
).DecodeFunc(securecookie.DecodeMulti)

之后在写入前编码:

encoded, err := cookieHandler.Encode("user_id", userID)
if err != nil { /* handle */ }
c.SetCookie(&http.Cookie{
    Name:  "user_id",
    Value: encoded,
    Path:  "/",
    HttpOnly: true,
    Secure: true, // 仅 HTTPS 传输
    SameSite: http.SameSiteLaxMode,
})

c.SetCookie() 的 Expires 和 MaxAge 别同时设

浏览器对同时设置 Expires 和 MaxAge 的 Cookie 行为不一致:Chrome 优先认 MaxAge,Safari 可能忽略 MaxAge 而只看 Expires,导致过期时间错乱。Echo 的 http.Cookie 结构体允许两者都赋值,但实际使用中必须二选一。

  • 设 MaxAge > 0:相对过期(秒数),推荐用于会话型 Cookie(如登录态)
  • 设 Expires 为未来时间点:绝对过期,适合长期凭证(如“记住我”)
  • 设 MaxAge = 0:会话 Cookie,关闭浏览器即失效
  • 设 MaxAge :立即删除(等效于 <code>Expires = time.Now().Add(-1))

注意:MaxAge 是 int 类型,不是 time.Duration;别误写成 MaxAge: time.Hour —— 这会编译失败或被截断为 0。

NotebookLM CLI Cookies
NotebookLM CLI Cookies

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

下载

读取加密 Cookie 时要检查 err == securecookie.ErrMacInvalid

解码失败不等于“Cookie 不存在”。用 cookieHandler.Decode("user_id", cookieValue, &userID) 时,可能返回三种典型错误:

  • http.ErrNoCookie:请求里压根没这个 Cookie 名(c.Cookie("user_id") 返回)
  • securecookie.ErrMacInvalid:Cookie 值被篡改或密钥不匹配(最常见于部署新密钥后旧 Cookie 未清理)
  • 其他 error:比如类型不匹配(userID 是 int,但存的是字符串)

别把 ErrMacInvalid 当成普通错误吞掉或返回 500;应视同未登录处理(跳转登录页或返回 401),否则攻击者反复提交非法值可能触发日志刷屏或埋点干扰。

HTTP Only + SameSite + Secure 三者缺一不可

哪怕用了加密,若 Cookie 属性配置不当,依然会被 XSS 或 CSRF 利用:

  • HttpOnly: true:阻止 JavaScript 读取(防 XSS 窃取)
  • Secure: true:强制仅 HTTPS 传输(防中间人窃听)
  • SameSite: http.SameSiteStrictMode 或 http.SameSiteLaxMode:限制跨站请求携带(防 CSRF)

特别注意:SameSite=Strict 在用户从外部链接点击进入站点时会丢失 Cookie,Lax 更实用;但若你的接口明确要求跨域 POST(如支付回调),就得配合 credentials: 'include' 和 CORS 配置,不能只依赖 SameSite。

加密只是让 Cookie 内容不可读,属性配置才是守住边界的最后一道门——密钥再长,漏了 HttpOnly 就等于把钥匙挂在门把手上。

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
cookie
cookie

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

12459

2023.06.30

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

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

1246

2023.11.23

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

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

864

2024.02.23

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

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

1946

2025.08.19

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

0

2026.11.02

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

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

120

2026.10.28

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

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

80

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Revel 官方 app.conf 文档
Revel 官方 app.conf 文档

共0课时 | 0人学习

php注册登录系统开发实战
php注册登录系统开发实战

共10课时 | 13.8万人学习

PHP基于Cookie的购物车模块设计
PHP基于Cookie的购物车模块设计

共10课时 | 11.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn