如何在Perl Catalyst MVC Framework中的请求结束之前编写/更新会话数据

时间:2012-02-28 23:39:03

标签: perl session-state catalyst

如何在Perl MVC Catalyst Framework中的请求结束之前编写或更新会话数据。 我正在使用Session::State::CookieSession::Store::FastMap

我需要确保数据在 长期运行的请求完成之前可用

2 个答案:

答案 0 :(得分:1)

这对我有用。

为了确保在长时间运行的请求中设置信息时更新信息,我在更新了与会话相关的一些重要信息后立即执行$c->finalize_session

$c->session->{important_info} = "new value";
$c->finalize_session;


我确认其他请求之后正在收集正确的值。

我没有观察到在请求期间多次调用$c->finalize_session的任何副作用,只是为了确保更新会话数据,但我不知道这一点。

我以这种方式设置的信息之一是更新进度条以反馈用户的计数器(因为此任务需要很长时间)。我不知道这是否是最佳方式,我将不胜感激任何建议。

答案 1 :(得分:0)

您可以在请求完成之前执行最后一秒处理,并通过覆盖应用程序主模块或插件中的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;
}

我在重写此方法之前收集有关请求的统计信息,或者如果它使用了太多内存,则重新启动工作进程。如果这有用,或者您对此有更多疑问,请与我们联系。