Mojolicious session析构函数

时间:2015-06-10 09:18:38

标签: perl mojolicious

当用户的会话过期时,如何调用某些自定义操作。这可以用mojolicious完成吗?可以用其他Web框架完成吗?

我正在寻找的术语是什么,我不知道谷歌的内容,除了“会话析构函数”或“会话破坏”。

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

1 个答案:

答案 0 :(得分:1)

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

我发现Plack::Session::Cleanup(可以由Plack::Middleware::Session使用)似乎有你想要的东西。不幸的是,在我遇到问题的地方,MojoX::Session::SimplePlack::Middleware::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行的新过期会话[不幸的是那里& #39;无法区分这两者])。 不幸的是,这个功能没有记录,因此它可能随时消失,而且我不确定何时/如何使用它(再次因为它没有记录)。

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

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

总而言之,flush grid.ColumnDefinitions.Add(new ColumnDefinition()); grid.RowDefinitions.Add(new RowDefinition()); 方法中的未记录的回调最接近,但所有这些解决方案都有一个致命的缺陷:它们只在事务发生时被调用,这意味着您将错过一些过期(除非您有其他机制来处理这些事件)。因此,我认为最好让其他API基于比您的应用程序会话更长的超时来管理其会话清理,或者为存储的其他API会话创建自己的超时/清除机制在你的申请中。