Сессия удаления сеанса подключаемого модуля Catalyst до его использования

Я использую Catalyst :: Plugin :: Session вместе с Catalyst :: Plugin :: Session :: Store :: DBIC и CatalystX :: SimpleLogin. Раньше я использовал их несколько раз, но сейчас у меня странное поведение. Я вижу, что как только я вхожу в систему, сеанс создается, затем удаляется, а затем предпринимается попытка обновить несуществующую строку сеанса, что приводит к сбою. Вот выполняемые запросы:

INSERT INTO sessions ( id) VALUES ( ? ): 'session:ff4732c1779d955a73d31b967db50ba59d3c0573'

DELETE FROM sessions WHERE ( id = ? ): 'session:ff4732c1779d955a73d31b967db50ba59d3c0573'

DELETE FROM sessions WHERE ( id = ? ): 'flash:ff4732c1779d955a73d31b967db50ba59d3c0573'

UPDATE sessions SET expires = ?, session_data = ? WHERE ( id = ? ): '1467954773', 'BQoDAAAABQp5TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTFfNCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzUxLjAuMjcwNC4xMDMgU2FmYXJpLzUzNy4zNgAAAAxfX3VzZXJfYWdlbnQJV33k1QAAAAlfX2NyZWF0ZWQJV33k1QAAAAlfX3VwZGF0ZWQKBXVzZXJzAAAADF9fdXNlcl9yZWFsbQQDAAAAAQiBAAAAAmlkAAAABl9fdXNlcg==', 'session:ff4732c1779d955a73d31b967db50ba59d3c0573'

Вот результаты отладки, которые я вижу:

[debug] Created session "ff4732c1779d955a73d31b967db50ba59d3c0573"

[debug] Created session "aec058e68a823f5711d64b18ad8c53611b1b832f"

[debug] change_sessid: deleting session data from "ff4732c1779d955a73d31b967db50ba59d3c0573"

[debug] change_sessid: storing session data to "aec058e68a823f5711d64b18ad8c53611b1b832f"

А вот и вылет:

http://pastebin.com/nWA0X6Lb

Я проверил, и функция, вызывающая delete_session_data, равна Catalyst::Plugin::Session::change_session_id.

Кроме того, это работает, когда я использую Catalyst :: Plugin :: Session: : Store :: File вместо Catalyst :: Plugin :: Session :: Store :: DBIC.

Кто-нибудь знает, что может пойти не так?

ОБНОВЛЕНИЕ:

Я проверил один из моих других серверов, который работает, и похоже, что по какой-то причине запросов на удаление нет:

INSERT INTO sessions ( id) VALUES ( ? ): 'session:08844c28572b99acd3603d50c2c3975d13c3a4b8'

UPDATE sessions SET expires = ?, session_data = ? WHERE ( id = ? ): '1467956394', 'BQcDAAAABgp5TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTFfNCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzUxLjAuMjcwNC4xMDMgU2FmYXJpLzUzNy4zNgAAAAxfX3VzZXJfYWdlbnQKBXVzZXJzAAAADF9fdXNlcl9yZWFsbQoONTAuMTc0LjI0Mi4yNTMAAAAJX19hZGRyZXNzBAMAAAABCgExAAAAAmlkAAAABl9fdXNlcgoKMTQ2Nzg2OTk5NAAAAAlfX2NyZWF0ZWQKCjE0Njc4Njk5OTQAAAAJX191cGRhdGVk', 'session:08844c28572b99acd3603d50c2c3975d13c3a4b8'

Дальнейшее обновление:

Я использую Perl 5.24. Я подумал, что это может быть актуально. Я собираюсь попробовать загрузить старую версию Perl и посмотреть, работает ли она.


person srchulo    schedule 07.07.2016    source источник


Ответы (1)


Итак, я считаю, что нашел проблему. Я думаю, что ошибка появилась в v 0.19. Исправление, которое я нашел, закомментировало эту строку в контроллере входа:

if( $form->process(ctx => $ctx, params => $p) ) { 
    #$ctx->change_session_id;

    $self->remember_me($ctx, $form->field( 'remember' )->value);

    $self->do_post_login_redirect($ctx);
} 

А пока я просто собираюсь перейти на версию 0.18.

person srchulo    schedule 07.07.2016