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会话吗?
您可以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)