在特定时间间隔后过期会话变量的索引

问题描述

我有一个ruby on rails应用程序,其中有多个会话变量,其中有一个特定的会话变量数组,我想在添加值后每10秒钟删除其值

例如,我有一个会话变量

session[:somename] = ["0","1","2","3"]

现在,我想在添加会话变量10秒后删除它们的索引,因此0应该在被推入会话10秒后删除。有没有办法做到这一点?我可以明确设置一个会话的到期时间吗?还是有其他方法可以通过使用会话来实现此目的?

感谢您的帮助,在此先感谢

解决方法

简短的回答是“否”。

默认情况下,rails使用单个cookie将会话存储为序列化的哈希。 Cookie本身可以有一个到期时间,届时客户端将拒绝整个会话Cookie,并且不会将其发送回Rails。但是,没有内置的解决方案可以使会话中的单个值过期。

但是,如果您有点创意,可以将数组转换为一组对:

t = Time.current.to_i
["0","1","2","3"].map.with_index {|v,i| [v,t + ((i + 1) * 10) ]}
# => [["0",1597863985],["1",1597863995],["2",1597864005],["3",1597864015]]

第二个值只是该值过期的unix时间戳。然后,当您读回时,您将拒绝过期的值:

Time.now.then { |t| serialized.reject{ |(v,e)| Time.at(e) < t } }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...