CGI :: Session过期的cookie和浏览器刷新

时间:2013-09-24 18:10:14

标签: html perl cgi

用户在我的网络应用程序中输入页面。如果cookie过期,我向用户提供登录页面的链接,要求用户再次登录。如果他点击退出按钮,则cookie过去将设置为过期。

    $cookie = $cgi->cookie(-name=>"CGISESSID",-value=>'', -path=>'/',-expires=>'-1d');

正如在浏览器的页面信息中看到的那样,cookie被正确设置为过期 但是,在我点击刷新

之前,页面不知道
my $cookie = $cgi->cookie('CGISESSID');
if ($cookie){
        #show content
}else{
        $cookie = $cgi->cookie(-name=>'CGISESSID', -expires=>'now');
        print $cgi->header(-cookie=>$cookie);
        print "Please log in again ";
        print "<a href=\"/login.html\"> Login page </a>";
}

如何强制刷新页面以删除cookie。如果我重定向页面,即使cookie过期,一个简单的后退按钮也会显示内容。

我在http://www.ibm.com/developerworks/webservices/library/ws-simplelogin/#loginJS

中设置了login.pl和login.js

2 个答案:

答案 0 :(得分:2)

注销时,您可以redirect转到其他页面:

$cookie = $cgi->cookie(-name=>'CGISESSID', -expires=>'now');
print $cgi->redirect(-uri => 'http://www.example.com/login', -cookie => $cookie);

编辑:我想我误解了你的问题。这听起来像你真正想做的是一旦cookie过期就重定向。这很棘手。假设我们的用户会话过期,但他们只是在浏览器中打开当前页面。不幸的是,在用户发送另一个请求之前,我们的CGI脚本不会再次运行,例如刷新页面。在他们发送请求之前,我们不会知道他们的会话是否已过期。

一种可能的解决方案是使用HTML <meta>标记将您的页面设置为自动刷新:

use CGI qw(meta);

print $q->header,
      $q->start_html(
          -head => meta( { -http_equiv => 'refresh',
                           -content => '60;URL=http://www.example.com/foo.cgi' } )
      ),
...

这将每60秒重定向到您的CGI脚本,允许您再次检查会话。

另外值得注意的是,在CGI.pm中开发Web应用程序的工具确实比用于开发Perl的DancerMojoliciousCatalyst等更好。

答案 1 :(得分:1)

尝试:

   print $cgi->redirect($SS1);
   # $SS1 is the url for login.html