我正在寻找一种优雅的方式将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。我无法让它发挥作用。
答案 0 :(得分:2)
这正是find
的用途。
CGI::Session->find( sub {
my ($session) = @_;
...
} );
作为副作用,这将删除过期的会话,但不会更改任何会话的访问时间(或其他任何内容)。
答案 1 :(得分:0)
如果您读取该会话文件,然后(如果您真的相信它)评估内容,您将得到一个标量变量$ D,它是对会话键/值对散列的引用。
这不会更新时间戳。您的时间戳将由CGI :: Session更新。
如果您通过外部阅读会话告诉我们您想要完成的任务,我可能会给您更具体的建议。