gpt4 book ai didi

Perl CGI 持久性 cookie

转载 作者:行者123 更新时间:2023-12-01 06:29:12 29 4
gpt4 key购买 nike

我希望用户即使关闭浏览器也不必登录。我的 cookie 将在一个月后过期。

用户登录成功

 $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/中创建的 session 。如何在浏览器关闭后加载现有的 cookie。我如何知道根据用户/浏览器加载哪个 session ?

最佳答案

只要您在 cookie 上设置了 future 的到期日期,即使在用户重新启动浏览器后它们也应该持续存在(当然,只要他们在该日期之前重新启动)。要加载 cookie,请执行您正在做的事情:

my $cookie = $cgi->cookie('CGISESSID');

要尝试使用 cookie 加载现有 session ,您只需将 CGI 对象传递给 CGI::Session 的 new 方法即可:

my $session = new CGI::Session(undef, $cgi, {Directory=>"/tmp"});

这将尝试使用随 CGI 请求传入的 cookie 来初始化现有 session ;如果不存在,它将创建一个新 session 。请注意,这假定 cookie 名称是 CGISESSID。要使用另一个名称,请运行:

CGI::Session->name("MY_SID");
# or
$session->name("MY_SID");

$session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'});

如果您还没有,我建议您阅读 CGI::Session tutorial .


编辑: session 设置为一个月后到期

$session->expire('+1M');

但 cookie 不是。如果您没有为 cookie 设置过期时间,浏览器会将其存储在内存中而不是磁盘上;一旦您关闭浏览器,cookie 就会消失。要设置 cookie 过期时间,请执行以下操作

$cookie = $cgi->cookie( -name=>$session->name, -value=>$session->id, -expires=>'+1M' );

关于Perl CGI 持久性 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011419/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com