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

Buffalo框架怎么设置Cookie和Session过期时间

千静同学_9622

千静同学_9622

发布时间:2026-11-02 09:03:09

|

411人浏览过

|

来源于php中文网

原创

expires_in 控制服务端 Session 数据存活时长(单位秒),不影响客户端 Cookie 过期;cookie_max_age 才决定浏览器 Cookie 生命周期,二者可分离但需协调,否则导致会话不一致。

buffalo框架怎么设置cookie和session过期时间

session.yml 的 expires_in 控制 Session 过期,但不等于 Cookie 过期

Buffalo 的 Session 生命周期由两层控制:服务端存储(如内存或数据库)的过期时间,和客户端 Cookie 的 Max-Age/Expires 属性。二者默认联动,但可分离。expires_in 字段只影响服务端 Session 数据的存活时长(单位秒),比如设为 3600 表示 1 小时后服务器自动丢弃该会话数据。

它不会强制浏览器删除 Cookie——除非你同时配置了 cookie_max_age 或显式调用 c.Session().Destroy()。

  • expires_in 必须是整数,不能写 "1h" 或 time.Hour
  • 若设为 0,Session 在服务端永不过期(不推荐,有内存泄漏风险)
  • 若设为负数(如 -1),Buffalo 会 panic:“invalid expires_in value”
  • 修改后必须重启 buffalo dev,热重载不生效

cookie_max_age 和 secure 共同决定浏览器是否保留 Cookie

Cookie 的实际生命周期由 cookie_max_age(单位秒)控制,它直接映射到 HTTP 响应头的 Max-Age。这个值独立于 expires_in,可以更短(比如 Session 存 24 小时,但 Cookie 只存 30 分钟),但不能更长——否则用户关浏览器再打开,Cookie 还在,但服务端已删 Session,导致 c.Session().Get() 返回 nil。

开发时务必确认:secure: false,否则浏览器拒绝保存 Cookie(因非 HTTPS);http_only: true 应保持开启,禁用它会让 JS 读取到 Session ID,引发 XSS 风险。

  • cookie_max_age: 1800 → Cookie 30 分钟后自动过期并从浏览器清除
  • cookie_max_age: 0 → Cookie 变成“会话 Cookie”,关闭浏览器即失效
  • secure: true 在 HTTP 环境下会导致 Cookie 不写入,且无错误提示,只表现为 c.Session().Get() 总是空
  • domain 字段留空即可,填错(如带 http://)会导致 Cookie 被浏览器静默丢弃

手动销毁 Session 比依赖过期更可靠

靠时间自动过期存在窗口期:用户可能在过期前最后一秒发请求,服务器仍认为有效;而浏览器 Cookie 尚未清除,下次请求又带上旧 ID,可能触发新 Session 初始化(取决于 store 实现)。生产环境建议主动清理。

Remix V2 Meta Sessions Review
Remix V2 Meta Sessions Review

审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他

下载

登出逻辑必须调用 c.Session().Destroy(),它会:清空服务端 Session 数据、删除客户端 Cookie(通过 Set-Cookie + Max-Age=0)、并让后续 c.Session().Get() 立即返回 nil。

  • 别只删 key:c.Session().Delete("user_id") 不等于登出,Session ID 依然有效
  • c.Session().Clear() 只清键值,不销毁 Session ID,也不删 Cookie
  • c.Session().Destroy() 后无需再调 Save(),它内部已处理
  • 若用数据库 store(如 PostgreSQL),Destroy() 会执行 DELETE 语句,不是软删

测试时注意:内存 store 不支持 expires_in 自动清理

Buffalo 默认用 memstore,它的 expires_in 仅在每次 Get() 时检查是否超时,不会后台定时扫描清理。这意味着:即使过了期,只要没人访问该 Session,它就一直占内存。

如果你跑的是长期运行的开发服务,或压测中创建大量 Session,得自己加监控或换 store(如 redis)。临时方案是定期调用 store.Clean(<em>time.Now())</em>,但 Buffalo 没暴露该接口,需改源码或换 pop-based store。

最易被忽略的一点:所有时间配置都基于服务器本地时间,如果部署在 Docker 容器里没同步宿主机时区,expires_in 可能比预期快或慢几十分钟——别只查代码,先 docker exec -it app date 看系统时间对不对。

热门AI工具

更多
豆包大模型

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

花生AI
花生AI Hot

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

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

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

火山引擎

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

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

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

相关专题

更多
Golang Beego框架
Golang Beego框架

本专题聚焦 Golang 全栈式 Web 框架 Beego 的学习与实战,内容涵盖 MVC 模式、路由控制、ORM 数据库操作、模块化开发、日志管理与 RESTful API 构建。通过企业管理系统、电商后端与微服务架构等实战案例,帮助学员掌握使用 Beego 高效开发企业级应用的核心能力。

3860

2025.08.27

go语言 beego框架
go语言 beego框架

本专题整合了go语言中beego框架相关内容,阅读专题下的文章了解更多详细内容。

7581

2025.09.10

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

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

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

260

2026.10.28

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

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

160

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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