【问题标题】:How to write/update session data before a request end in Perl Catalyst MVC Framework如何在 Perl Catalyst MVC 框架中的请求结束之前写入/更新会话数据
【发布时间】:2012-02-28 23:39:03
【问题描述】:

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

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

【问题讨论】:

    标签: perl session-state catalyst


    【解决方案1】:

    这对我有用。

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

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


    在那之后,我验证了其他请求正在收集正确的值。

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

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

    【讨论】:

      【解决方案2】:

      您可以通过覆盖应用程序主模块或插件中的 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;
      }
      

      我之前已经重写了这个方法来收集关于请求的统计信息,或者如果它使用太多内存则重新启动工作进程。让我知道这是否有帮助,或者如果您对此有更多疑问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        相关资源
        最近更新 更多