【问题标题】:Mojolicious session destructorMojolicious 会话析构函数
【发布时间】:2015-06-10 09:18:38
【问题描述】:

当用户会话到期时,我如何调用一些自定义操作。这可以用 mojolicious 完成吗?可以用其他 web 框架完成吗?

我在找什么术语,除了“会话析构函数”或“会话销毁”之外,我不知道谷歌是什么。

具体来说,我想通知一个外部 API,删除那里的会话。

【问题讨论】:

标签: perl mojolicious


【解决方案1】:

由于您的问题没有得到任何答案,我决定进行一些挖掘。

我发现Plack::Session::CleanupPlack::Middleware::Session 可以使用)似乎有你想要的。不幸的是,这就是我遇到问题的地方,Plack::Middleware::Session::Simple 有一个MojoX::Session::Simple,但非简单模块没有连接器。所以,我不知道这是否对你有帮助,但你可以四处看看是否可以。


然后我查看了Mojolicious::SessionsMojolicious::Sessions::StorableMojoX::SessionMojolicious::Plugin::SimpleSession 以了解它们如何处理到期...

查看the code for Mojolicious::Sessions,似乎会话仅存储在cookie中,并且仅在从客户端加载回cookie时才检查过期。如果你在第 24 行有一个钩子来处理过期会话,它可能会为同一个过期会话多次调用(可能不是你想要的)或者它可能永远不会被调用(如果客户端在过期之前停止访问系统) .

Mojolicious::Sessions::Storable 基于Mojolicious::Sessions 并且似乎具有相同的到期代码(具有相同的问题)。

查看the code for MojoX::Session,看起来flush 提供了回调(对于第 216 行的先前过期会话和第 227、233、262 和 268 行的新过期会话 [不幸的是,无法区分两者之间])。 不幸的是,此功能没有记录,因此它可能随时消失,而且我不确定何时/如何使用它(再次因为它没有记录)。

Mojolicious::Plugin::SimpleSession 有一个可以被覆盖的方法 (_too_old)。

我还查看了WWW::Session::Storage::File,它经常与 WWW::Session 一起使用,可以通过 Mojolicious::Plugin::WWWSession 使用,您可以在第 112 行附近放置一个挂钩 in the code,但同样没有内置任何内容。

因此,总而言之,MojoX::Sessionflush 方法中的 undocumented 回调最接近,但所有这些解决方案都有一个致命缺陷:它们仅在交易发生,这意味着您将错过一些到期时间(除非您有另一种机制来处理这些)。因此,我认为最好让其他 API 根据比您的应用程序会话更长的超时来管理其会话清理,或者为存储在您的应用程序中的其他 API 会话创建自己的超时/清理机制。

【讨论】:

  • 所以我的问题似乎没有直接的答案允许我在 Mojolicious 中这样做。无论如何,现在我有很多指示可以在哪里进行更多研究。谢谢
  • 似乎“Mojo::Server::PSGI 允许 Mojolicious 应用程序在所有 PSGI 兼容服务器上运行”,但我不知道您是否可以使用 Plack::Middleware::SessionPlack::Session::Cleanup 以及如何和如果值得。祝你好运。如果您找到解决方案,请回来回答您自己的问题!
  • 我刚刚注意到 Mojolicious::Plugin::PlackMiddleware 应该允许您使用来自 Mojolicious 的 Plack::Middleware::SessionPlack::Session::Cleanup。我不知道它是否有效,但值得一试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
相关资源
最近更新 更多