Пользователь вводит страницу в мое веб-приложение. Если срок действия файла 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 истёк.
У меня есть login.pl и login.js настроены как в http://www.ibm.com/developerworks/webservices/library/ws-simplelogin/#loginJS
При выходе из системы вы можете перенаправить на другую страницу:
$cookie = $cgi->cookie(-name=>'CGISESSID', -expires=>'now');
print $cgi->redirect(-uri => 'http://www.example.com/login', -cookie => $cookie);
EDIT: Я думаю, что я неправильно понял ваш вопрос. Похоже, что вы действительно хотите сделать, это перенаправить, как только истекает срок действия файла cookie. Это сложно. Скажем, наша пользовательская сессия истекает, но они просто оставляют текущую страницу открытой в своем браузере. К сожалению, наш CGI-скрипт не будет запускаться снова, пока пользователь не отправит другой запрос, например, обновив страницу. И пока они не отправят запрос, мы не узнаем, истек ли их сеанс.
Одним из возможных решений является автоматическое обновление вашей страницы с помощью <meta>
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' } )
),
...
Это будет перенаправляться на ваш CGI-скрипт каждые 60 секунд, что позволит вам снова проверить сеанс.
С другой стороны, есть действительно намного лучшие инструменты, чем CGI.pm для разработки веб-приложений в Perl: Dancer, Mojolicious и Catalyst.
пытаться:
print $cgi->redirect($SS1);
# $SS1 is the url for login.html