【问题标题】:How to access Dancer2's session object?如何访问 Dancer2 的会话对象?
【发布时间】:2017-07-04 00:52:10
【问题描述】:

我正在为我的网络应用程序使用 Dancer2 和 YAML 会话引擎。 我的config.yml 包含

engines:
  session:
    YAML:
      ...
      cookie_duration: 5 minutes
      ...

我想显示类似 “您的会话将在 X 分钟后到期”的内容

如何访问该值,即如何访问路由中的$session 对象?

使用 DSL 关键字 session 我只能设置和获取 任意值,例如 session username => 'Bob';$username = session('username'); 等。

请注意,我对获取配置值 (settings('engines')->{session}{YAML}{cookie_duration}) 不感兴趣,因为这是我必须解析的字符串,它取决于 YAML 作为我的会话引擎。我想访问$session->session_duration

【问题讨论】:

  • 理论上你应该做session->expires,因为session只是在这样使用时返回会话对象。但是,在我返回undef 的测试中。但是我没有完整的配置,可能我做错了什么。如果你通过Data::Printer 执行p session,你会看到session 返回的Dancer2::Core::Session 对象有一个方法expirescookie_duration 不是服务器上会话的到期时间。见metacpan.org/pod/Dancer2::Core::Session#expires
  • 嘿,酷!这正是解决方案。在我的配置中session->expires 返回 1514648770(即now + 6 months,我当前配置为cookie_duration 的值)。完美的。我的问题是我无法弄清楚如何访问该值和/或将session() 转换为$session。如果你写一个(简短的)答案,我会用赞成票压倒它。 ;-)

标签: perl session dancer


【解决方案1】:

当您不带任何参数地调用session 时,您将获得会话对象。如果这样更容易阅读,请随意将其分配给 $session 变量。要获取过期时间,请使用the expires method

my $session = session;
warn $session->expires;

或者更简单:

warn session->expires;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2013-12-11
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多