CGI :: Файлы cookie с истекшим сроком действия и обновление браузера

0

Пользователь вводит страницу в мое веб-приложение. Если срок действия файла 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

Теги:
cgi

2 ответа

2
Лучший ответ

При выходе из системы вы можете перенаправить на другую страницу:

$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.

  • 0
    То, что условие Else не вводится, пока страница не обновится
  • 0
    @Jabda См редактировать.
1

пытаться:

   print $cgi->redirect($SS1);
   # $SS1 is the url for login.html
  • 0
    То, что условие Else не вводится, пока страница не обновится
  • 0
    не знаю, что вы имеете в виду, вышеописанное работает для меня, код очень похож на ваш: если .... else {redirect}, почему он не работает для вас?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню