用户在我的网络应用程序中输入页面。如果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答案 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的Dancer,Mojolicious和Catalyst等更好。
答案 1 :(得分:1)
尝试:
print $cgi->redirect($SS1);
# $SS1 is the url for login.html