即使浏览器已关闭,我也希望用户无需登录。我的饼干将在一个月后过期。
当用户成功登录时
$session = CGI::Session->new (undef, undef, {Directory=>'tmp/'})
or die CGI::Session->errstr;
$session->param('username', $username);
$session->expire('+1M');
$cookie = $cgi->cookie( -name=>$session->name, -value=>$session->id );
print $cgi->header(-cookie=>$cookie );
然后,只要他们不关闭浏览器,他们就会被重定向到他们可以访问的另一个页面。这是第二页中的代码:
my $cookie = $cgi->cookie('CGISESSID');
if ($cookie){
print $cgi->header(-cookie => $cookie);
else{
//ask them to relog in
}
我可以看到在tmp /中创建的会话。如何在浏览器关闭后加载现有cookie。如何根据用户/浏览器知道要加载哪个会话?
答案 0 :(得分:3)
只要您在Cookie上设置了未来的到期日期,即使用户重新启动浏览器,它们也应该保留(当然,只要它们在该日期之前重新启动)。要加载Cookie,请执行您正在执行的操作:
my $cookie = $cgi->cookie('CGISESSID');
要尝试使用cookie加载现有会话,您只需将CGI对象传递给CGI :: Session的new
方法:
my $session = new CGI::Session(undef, $cgi, {Directory=>"/tmp"});
这将尝试使用通过CGI请求传入的cookie初始化现有会话;如果一个人不存在,它将创建一个新的会话。请注意,这假定cookie名称为CGISESSID
。要使用其他名称,请运行:
CGI::Session->name("MY_SID");
# or
$session->name("MY_SID");
$session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'});
如果您还没有,我建议您阅读CGI::Session tutorial。
编辑:会话设置为在一个月后到期
$session->expire('+1M');
但饼干不是。如果您没有在cookie上设置过期,浏览器会将其存储在内存中但不会存储在磁盘上;一旦关闭浏览器,cookie就会消失。要设置Cookie过期,请执行类似
的操作$cookie = $cgi->cookie( -name=>$session->name, -value=>$session->id, -expires=>'+1M' );