如果我在cgi-perl中刷新页面,如何延长会话到期的时间?

时间:2017-08-10 15:12:39

标签: perl session cookies

我正在使用CGI :: Session模块。我创建了一个会话,并且使用会话ID创建了一个cookie,并在用户单击登录按钮并且凭据有效时发送到浏览器。

use CGI::Session;
use CGI::Session::Tutorial;
use CGI::Session::Driver::file;

my $session = new CGI::Session("driver:File", undef, 
                               {Directory => "/tmp/sessions"});         
my $sid = $session->id();   

my $cookie = $query->cookie(-name   => "CGISESSID",
                            -value  => $session->id,
                            -domain => 'xyz.com',
                             path   => "/");

print "Set-Cookie: $cookie\n";  

$session->param("UserName", $loginUserName);
$query->hidden( 'UserName', $loginUserName);

$session->expire("UserName", '1m');
$session->expire('+15m'); 
$session->flush(); 

当我转到下一页时,例如“欢迎”我检查会话是否存在cookie ID。如果是,则加载会话,否则会创建新会话。如果加载会话,我希望到期时间增加+15分钟。这是由会话模块处理的吗?此外,如果欢迎页面中有任何活动,我希望会话过期时间保持增加,如果不活动,会话应在15分钟空闲时间后过期。

my $cookieSid = $query->cookie("CGISESSID") || undef;
my $session;

if ($cookieSid) {
    $session = new CGI::Session(undef, $cookieSid,
                                {Directory=>'/tmp'});
} else {
    create a new session/redirect to login page
}

我没有看到在tmp / sessions文件夹中创建的会话的时间戳发生变化,这意味着到期时间尚未从上一个活动实例更新到15分钟。

此外,在浏览器关闭时让cookie过期是一种好习惯吗?

1 个答案:

答案 0 :(得分:1)

如果您希望会话在访问CGI脚本后的15分钟内过期,请将其设置为

$session->expire('+15m');

它涵盖在documentation