我正在使用Mojolicious Lite构建应用程序,我正在寻找一种方法来观看有关活动会话的所有数据。我主要是这样做的,因为这是我第一次尝试使用Mojolicious Lite的会话,我想看看幕后发生了什么。
一对夫妇说: 我对Mojolicious很新,因为你可能会猜到我正在使用Mojolicious Lite。我之前写过的任何Mojolicious Lite应用程序都非常简单,所以我对它的熟悉程度并不高。 就这一点而言,我仍然处于perl的“早期中间阶段”,所以在perl的任何OO的内部运作方面都很重要。对于我来说,这主要是外国领域。
那就是说,我自己做了几条小路:
get '/firstpage' => sub{
my $self = shift;
my $usr = $self->session(user => 'first_user');
$self->render(text => $usr);
};
get '/secondpage' => sub{
my $self = shift;
my $usr = $self->session(user => 'second_user');
$self->render(text => $usr);
};
get '/sessions' => sub{
my $self = shift;
$self->render(text => Dumper(app->sessions));
};
我正在假设,在我访问前两个网址后,Mojolicious会在某处确认某些数据,以确认它知道first_user和second_user。 (在理解如何使用Mojolicious Lite会话时,我也可能完全脱离基础......老实说,从文档来看,我不太确定。)
可悲的是,/ sessions只显示了Mojolicious :: Sessions对象的内容:
$ VAR1 = bless({ 'cookie_path'=> '/', 'secure'=> 0, 'cookie_name'=> 'mojolicious', 'default_expiration'=> 3600 },'Mojolicious :: Sessions');
但我假设在某个地方,我可以得到Mojolicious所有与会话相关的数据的哈希值。我一直在浏览文档一段时间,但我还没有找到任何线索。
有什么见解?
答案 0 :(得分:6)
是的,我认为你错过了会话的重点。服务器/应用程序不记得每个访问用户的状态。为了让它看起来像它,我们有饼干。会话是每个客户端持久性的事情。我正在假设,在我访问前两个网址后,Mojolicious会在某处确认某些数据,以确认它知道first_user和second_user。 (在理解如何使用Mojolicious Lite会话时,我也完全不合适......老实说,从文档来看,我不太确定。)
会话信息只是一个散列引用,编码为JSON并存储在客户端的cookie中。这对于记住您已登录时非常有用,可以是您的购物车中的用户名,也许是数字参数。当您请求页面时,此cookie将被发送回服务器,服务器可以访问数据并为您准备响应,因为您知道会话的状态。
因此没有“活动会话”的记录。所有这些信息都在所有客户中分发。
如果您想更好地了解正在发生的事情,我是否可以推荐tempire的插件Mojolicious::Plugin::ConsoleLogger,当前请求的 会显示所有相关信息(会话,藏匿等) )在浏览器的javascript控制台中。
这是一个例子。
#!/usr/bin/env perl
use Mojolicious::Lite;
#plugin 'ConsoleLogger'; # if desired
any '/' => sub {
my $self = shift;
my $name = $self->session('name') || 'Unknown'; # get the name from the session
$self->render( text => "Hello $name" );
};
any '/name/:name' => sub {
my $self = shift;
my $name = $self->stash('name'); # get name from path
$self->session( name => $name ); # and store it in the session
$self->redirect_to('/');
};
any '/logout' => sub {
my $self = shift;
$self->session( expires => 1 );
$self->redirect_to('/');
};
app->start;
如果您访问/name/ghorahn
,它会将您的名字存储在Cookie中。从那时起,每当你访问/
时,它都会向你问好,直到:
/name/whatever
/logout
以手动使会话失效您会注意到另一个用户(在另一台计算机上,或者在同一台计算机上的其他浏览器上)可能有不同的名称,但两者都是持久的。这就是会议的目的。 : - )