Catalyst 插件会话在使用前删除会话

Catalyst Plugin Session deleting session before it is used

我正在使用 Catalyst::Plugin::Session along with Catalyst::Plugin::Session::Store::DBIC and 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 版本,看看是否可行。

所以我相信我找到了问题所在。我认为 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 版。