【问题标题】:How to destroy cookies when idle in Dancer (Perl) using Dancer::Session::Cookie?如何使用 Dancer::Session::Cookie 在 Dancer (Perl) 中空闲时销毁 cookie?
【发布时间】:2014-09-22 20:30:52
【问题描述】:

有没有内置的方法来销毁由Dancer::Session::Cookie 生成的会话 cookie 在闲置一定分钟后?我注意到,当我重新启动 Nginx 或 Starman 服务器时,它甚至不会破坏会话,这不是我想要的(出于安全原因)。

如果没有内置方法,将会话上次活动的时间存储在 SQL 数据库中并在每次操作后更新它是否存在固有的错误?然后,如果超过 15 分钟左右没有更新该条目,则会话 cookie 将被销毁(使用 session->destroy)。这似乎不是最好的解决方案,但也许这是唯一的方法。据我了解,您还可以在 HTTP 标头中手动设置 cookie 过期时间,但这只会破坏客户端的 cookie,对吗?

【问题讨论】:

标签: perl session cookies dancer expired-cookies


【解决方案1】:

我认为你想反其道而行之。

当您生成 cookie 时,使用 expires 属性将其设置为“15 分钟”:

https://metacpan.org/pod/Dancer::Cookie#expires

然后每次为该会话做某事时,调用 Dancer::Cookie init 方法:

https://metacpan.org/pod/Dancer::Cookie#init

... 刷新 cookie(如果您没有使用默认路径,请传入路径)。

用户的浏览器应在给定时间后为您过期 cookie。

(我实际上没有尝试过,但代码暗示它应该可以工作 - init 方法的文档肯定会更清晰)

【讨论】:

  • Dancer::Cookie 和 Dancer::Session::Cookie 兼容吗?我现在正在使用 Dancer::Session::Cookie 生成会话,但我会尝试您的建议并让您知道!
  • 我决定通过将过期日期存储在加密的 cookie 中、在每次请求后更新它并检查它是否过期来处理过期问题。在客户端,我只是设置了 1 天的固定到期时间(在配置文件中使用 session_expires: '24 hours')。我不知道如何在每次请求后使用Dancer::Session::Cookie 在客户端修改过期值,但无论如何 1 天的固定时间应该没问题(它们将在 30 分钟不活动后注销,所以我怀疑有人会完整一天没有休息 30 分钟)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2015-03-14
相关资源
最近更新 更多