【发布时间】:2012-02-28 23:39:03
【问题描述】:
如何在 Perl MVC Catalyst Framework 中的请求结束之前写入或更新会话数据。
我正在使用Session::State::Cookie 和Session::Store::FastMap
我需要确保数据在长时间运行的请求完成之前可用
【问题讨论】:
标签: perl session-state catalyst
如何在 Perl MVC Catalyst Framework 中的请求结束之前写入或更新会话数据。
我正在使用Session::State::Cookie 和Session::Store::FastMap
我需要确保数据在长时间运行的请求完成之前可用
【问题讨论】:
标签: perl session-state catalyst
这对我有用。
为确保在长时间运行的请求中设置信息时更新信息,我在更新与会话相关的一些重要信息后执行$c->finalize_session:
$c->session->{important_info} = "new value";
$c->finalize_session;
在那之后,我验证了其他请求正在收集正确的值。
在请求期间我没有观察到任何副作用调用$c->finalize_session 只是为了确保更新会话数据,但我不确定这一点。
我以这种方式设置的信息之一是更新进度条以反馈用户的计数器(因为此任务需要很长时间)。我不知道这是否是最好的方法,我会很感激任何建议。
【讨论】:
您可以通过覆盖应用程序主模块或插件中的 handle_request 方法,在请求完成并将响应发送到客户端之前进行最后一秒处理。
sub handle_request {
my ($c, @args) = @_;
my $status = $c->next::method(@args);
# Do some last minute processing before the request is completed.
return $status;
}
我之前已经重写了这个方法来收集关于请求的统计信息,或者如果它使用太多内存则重新启动工作进程。让我知道这是否有帮助,或者如果您对此有更多疑问。
【讨论】: