14、Rails 会话管理全解析

Rails 会话管理全解析

1. 会话基础

HTTP 是无状态协议,若没有会话概念,就无法关联不同的 HTTP 请求,也难以识别访问应用的用户。当新用户访问 Rails 应用时,会自动创建新会话。会话既指用户使用应用的时间段,也指为用户保存的持久哈希数据结构,由唯一的会话 ID(32 位随机十六进制字符串)标识。新会话创建时,Rails 会自动向浏览器发送包含会话 ID 的 cookie,之后浏览器每次请求都会将会话 ID 传回服务器以保持连续性。

Rails 设计 Web 应用时,建议尽量少用会话存储有状态数据,数据持久化存储应放在数据库中。因为在用户会话哈希中保留对象时间越长,越难保证对象与数据库数据一致。

2. 会话存储内容

决定会话哈希中存储内容并不难,遵循尽量少存原则即可。一般来说,整数(用于键值)和短字符串消息可以存储,对象则不适合。

多数 Rails 应用会在会话中存储 current_user_id ,而非当前用户对象。认证系统应在每次请求前从数据库加载用户实例,并通过 ApplicationController 上的方法统一提供。这样能在不等待会话过期的情况下禁用特定用户的访问权限。

存储对象到会话的一般准则如下:
- 必须能被 Ruby 的 Marshal API 序列化,排除数据库连接和其他 I/O 对象等特定类型。
- 大型对象图可能超出会话存储大小限制,具体取决于所选的会话存储机制。
- 关键数据不应存储在会话中,因为用户结束会话(关闭浏览器或清除 cookie)可能导致数据丢失。
- 频繁更

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值