【问题标题】:perl - convert cgi::session file into a hashperl - 将 cgi::session 文件转换为哈希
【发布时间】:2015-05-28 07:23:16
【问题描述】:

我正在寻找一种优雅的方式来将 cgi::session 文件读入哈希,而无需加载会话并更新访问时间。这是会话文件中的数据的样子...

$D = {
    '_SESSION_ETIME' => 283824000,
    '_SESSION_ID' => 'a07d36e7d9bc89d46a64ae271fe3709e',
    'userid' => '99999',
    '_SESSION_REMOTE_ADDR' => '111.222.333.444',
    '_SESSION_CTIME' => 1432738284,
    '_SESSION_ATIME' => 1432740281,
    '_SESSION_EXPIRE_LIST' => {'~logged-in' => 120},
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0'
};;$D

我需要生成活动和非活动会话的报告。我还需要跟踪人们使用的各种浏览器。

编辑:我确实在 Sessions.pm load() 子例程中发现了 cmets,它没有将任何“真”值作为第四个参数传递,并将其设为只读。我无法让它工作。

【问题讨论】:

标签: perl session


【解决方案1】:

这正是find 的用途。

CGI::Session->find( sub {
   my ($session) = @_;
   ...
} );

作为副作用,这将删除过期会话,但不会更改任何会话的访问时间(或其他任何内容)。

【讨论】:

    【解决方案2】:

    如果您阅读该会话文件,然后(如果您真的信任它)评估内容,您最终会得到一个标量变量 $D,它是对会话键/值对哈希的引用。

    这不会更新时间戳。 CGI::Session 正在更新您的时间戳。

    如果你告诉我们你想通过外部阅读课程来完成什么,我可能会给你更具体的建议。

    【讨论】:

    • 我需要生成活动和非活动会话的报告。我还需要跟踪人们使用的各种浏览器。
    • 这样你就可以了。读取文件,将文件评估为变量,迭代它们。如果你从 CGI::Session 窃取代码,那么你就不需要写太多了。事实上,如果你复制它,然后删除时间戳更新语句,你就大功告成了。
    • 代码其实在CGI::Session::Serialize::default
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 2021-07-13
    • 1970-01-01
    • 2013-08-08
    • 2011-05-30
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多