perl - 将cgi :: session文件转换为哈希值

时间:2015-05-27 15:42:49

标签: perl session

我正在寻找一种优雅的方式将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()子程序中找到了注释,这些注释无法将任何“true”值作为第4个参数传递,并使其成为read_only。我无法让它发挥作用。

2 个答案:

答案 0 :(得分:2)

这正是find的用途。

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

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

答案 1 :(得分:0)

如果您读取该会话文件,然后(如果您真的相信它)评估内容,您将得到一个标量变量$ D,它是对会话键/值对散列的引用。

这不会更新时间戳。您的时间戳将由CGI :: Session更新。

如果您通过外部阅读会话告诉我们您想要完成的任务,我可能会给您更具体的建议。