Mojolicious::Sessions

作者: JSON_NULL | 来源:发表于2017-10-17 16:23 被阅读19次

简介

use Mojolicious::Sessions;

my $sessions = Mojolicious::Sessions->new;
$sessions->cookie_name('myapp');
$sessions->default_expiration(86400);

Mojolicious::Sessions是一个基于签名Cookie的会话管理器。

Mojolicious::Session根据Mojolicious的签名Cookie管理会话。所有数据都使用Mojo::JSON进行序列化,并在客户端上存储Base64编码,但使用HMAC-SHA1签名保护不受不必要的更改。

这种Session管理方式有如下缺点:

  1. 受cookie 尺寸的限制
  2. 虽然进行HMAC-SHA1签名保护,不会被客户端修改,但所有session数据信息依然会完全暴露给用户,安全性不好。
  3. 所有session数据在用户的每次请求中都会从客户端带到服务器端,再由服务器发给客户端,造成不必要的带宽和流量浪费。

基于以上缺点,如果要实现一个Web应用,最好使用 Mojolicious::Plugin::SessionStore插件对session数据存取功能进行扩展。

属性

Mojolicious::Sessions实现了以下属性。

cookie_domain

my $domain = $sessions->cookie_domain;
$sessions  = $sessions->cookie_domain('.example.com');

session会话存储到的Cookie域,默认情况下是未定义的。

cookie_name

my $name  = $sessions->cookie_name;
$sessions = $sessions->cookie_name('session');

session会话数据存储在Cookie中的名称,默认为mojolicious。

cookie_path

my $path  = $sessions->cookie_path;
$sessions = $sessions->cookie_path('/foo');

session会话存储到的Cookie路径,默认情况下是/

default_expiration

my $time  = $sessions->default_expiration;
$sessions = $sessions->default_expiration(3600);

会话在多久后过期(单位为秒),默认为3600。每次请求都会刷新过期。将期值设置为0,表示会话持续到浏览器窗口关闭,但这样做可能会存在安全隐患。为了更好的对session的过程时间进行控制你还可以直接设置expires的值。

# Expiration date in seconds from now (persists between requests)
$c->session(expiration => 604800);

# Expiration date as absolute epoch time (only valid for one request)
$c->session(expires => time + 604800);

# Delete whole session by setting an expiration date in the past
$c->session(expires => 1);

deserialize

my $cb    = $sessions->deserialize;
$sessions = $sessions->deserialize(sub {...});

用于反序列化session数据的回调函数,默认为Mojo::JSON中的j函数。

$sessions->deserialize(sub {
  my $bytes = shift;
  return {};
});

secure

my $bool  = $sessions->secure;
$sessions = $sessions->secure($bool);

在所有session存储到的cookie中设置安全标志,强制要求浏览器只通过https连接发送它们。

serialize

my $cb    = $sessions->serialize;
$sessions = $sessions->serialize(sub {...});

用于序列化session数据的回调函数,默认为Mojo::JSON中的encode_json函数。

$sessions->serialize(sub {
  my $hash = shift;
  return '';
});

方法

Mojolicious::Sessions继承Mojo::Base中的所有方法,并实现以下方法。

load

$sessions->load(Mojolicious::Controller->new);

从已经签名的Cookie中加载session数据。

store

$sessions->store(Mojolicious::Controller->new);

将session数据存储到签名的cookie中。

相关文章

  • Mojolicious::Sessions

    简介 Mojolicious::Sessions是一个基于签名Cookie的会话管理器。 Mojolicious:...

  • Mojolicious::Routes::Pattern

    简介 Mojolicious::Routes::Pattern是Mojolicious::Routes的核心。 属...

  • Mojolicious::Routes::Route

    简介 Mojolicious::Routes::Route是Mojolicious::Routes使用的路由窗口。...

  • Mojolicious::Plugin::SessionStor

    简介 Mojolicious::Plugin::SesionStore是一个Mojolicious的session...

  • Mojolicious::Routes

    简介 Mojolicious::Routes是Mojolicious Web框架的核心。 属性 Mojolicio...

  • Mojolicious::Renderer

    简介 Mojolicious::Renderer是标准的Mojolicious渲染器。 属性 Mojoliciou...

  • Mojolicious::Plugin

    简介 Mojolicious::Plugin是Mojolicious中所有插件的抽象基类。请参阅Mojolicio...

  • Mojolicious::Command

    简介 Mojolicious::Command 是Mojolicious中所有命令的抽象基类。 属性 app 当前...

  • Mojo::Types

    简介 Mojolicious::Types管理着Mojolicious中的所有MIME类型。 下面的代码段列出了常...

  • Mojolicious::Plugins

    简介 Mojolicious::Plugins是Mojolicious的插件管理器。 可用插件 下面是已经包含在M...

网友评论

    本文标题:Mojolicious::Sessions

    本文链接:https://www.haomeiwen.com/subject/hdmduxtx.html