Mojolicious定制会议

Tud*_*tin 4 perl dbi mojolicious

我正在尝试使用Mojolicious的数据库会话,而不是使用已签名cookie的内置数据库会话.

startup子程序中我有类似的东西:

my $dbh = DBI->connect(                                                                                                                                  
                        $config->{database}->{dsn},                                                                                                      
                        $config->{database}->{user},                                                                                                     
                        $config->{database}->{password},
                      );

my $session = MojoX::Session->new(
    store     => [dbi => {dbh => $dbh}],  # use MojoX::Session::Store::Dbi
    transport => 'cookie',                # this is by default
    ip_match  => 1
);

(ref($self))->attr( 'session' => sub {                
                return $session;
                } );
Run Code Online (Sandbox Code Playgroud)

我想用session对象类似$self->session$self->app->session在控制器.

不幸的是它不起作用 - 它使用以前的会话(来自不同的浏览器).

这让我发疯了 - 我今天所做的一切都是为了让这项工作 - 我已经阅读了所有可用的文档,也是其MojoX::Session所有相关类的来源,尝试了大约923847293847239847种方法使其工作,但似乎没有做到这一点.

PS:我session在db中创建了表.

你知道我应该怎么做以便能够使用Mojolicious的DB会话吗?

Tar*_*ras 6

您可以MojoX::Session作为startup函数中的插件连接到应用程序.

use Mojolicious::Plugin::Session;

[...]

sub startup {
  my $self = shift;

  [...]

  $self->plugin( session => {
    stash_key => 'mojox-session',
    store     => [dbi => {dbh => $dbh}],  # use MojoX::Session::Store::Dbi
    transport => 'cookie',
    ip_match  => 1
  });

  [...]
Run Code Online (Sandbox Code Playgroud)

之后,您将通过mojox-session控制器中的存储键" " 访问会话.

例如:

$self->stash('mojox-session')->data('something');
Run Code Online (Sandbox Code Playgroud)