CGI :: Сеансы обмена сессиями между клиентами! - PullRequest
6 голосов
/ 16 мая 2011

Когда я попробовал это:

while (my $cgi = new CGI::Fast) {
    ...
    my $session = CGI::Session->new(undef, $cgi);
    ...
 }

Я обнаружил, что разные клиенты получают один и тот же сеанс! Что будет причиной этого странного совместного использования сеанса?

РЕДАКТИРОВАТЬ: Я не могу воспроизвести это надежно, но в моем тестировании я видел случаи, когда я удаляю cookie сеанса из браузера, обновлял страницу и (используя панель Net Firebug Net) видел, что Я не отправляю cookie в запросе, но получаю Set-Cookie в ответе с старым идентификатором сеанса! Возможно, что-то торчит в памяти из-за использования FastCGI?

(Примечание: я удалил второй фрагмент кода из более ранней версии этого вопроса, потому что я больше не уверен, что он актуален)

РЕДАКТИРОВАТЬ: Это http://osdir.com/ml/web.fastcgi.devel/2004-02/msg00007.html, кажется, описывает поведение, которое я вижу

EDIT: Как упомянуто в вышеупомянутой публикации osdir.com, FCGI.pm содержит этот код:

for (keys %FCGI::ENV) {
    $ENV{$_} = $FCGI::ENV{$_} unless exists $ENV{$_};
}

Это, кажется, довольно явно испорчено моим глазам. Он копирует из постоянной копии переменных среды в копию среды, видимой для сценария, когда текущий запрос не предоставляет значение для данной переменной. Таким образом, если запрос приходит без файлов cookie, он не найдет определенный HTTP_COOKIE, поэтому он передаст сценарию файлы cookie из последнего отправленного запроса, что означает какой-то другой сеанс! Я не понимаю, как этот код может быть правильным, и это очень используемый модуль!

Ответы [ 2 ]

2 голосов
/ 13 апреля 2012

Я исправил эту ошибку около семи месяцев назад, вам нужно обновить CGI.pm до> = 3.56.CGI :: Fast использовал API FCGI, который устарел и удален из документации более десяти лет назад.

1 голос
/ 16 сентября 2011

Вы используете mod_perl? Если это так, глобальные переменные будут сохраняться в разных запросах, и это будет прерывистым, потому что это будет зависеть от того, обрабатывается ли запрос тем же процессом Apache httpd или нет, что будет зависеть от загрузки сайта и других переменных.

...