Как установить срок действия cookie для MojoX::Sessions?

Какое бы значение срока действия я ни задал для expires() или expires_delta(), срок действия файла cookie всегда составляет один час. Как изменить его, чтобы сеанс и время истечения срока действия куки совпадали?


person Jeff Jirsa    schedule 12.12.2012    source источник
comment
Пожалуйста, покажите нам фактический код, с которым у вас возникли проблемы.   -  person Moritz Bunkus    schedule 13.12.2012
comment
$session-›expires(время + 3600 * 8)   -  person Jeff Jirsa    schedule 18.12.2012


Ответы (1)


Хотя мне нравится работа vti, этот дистрибутив выглядит устаревшим и был заменен в прошлом. Сегодня стандартный способ установки даты истечения сеанса объясняется в Mojolicious::Sessions:

default_expiration

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

Время истечения сеанса по умолчанию в секундах с этого момента, по умолчанию 3600. Тайм-аут истечения срока действия обновляется для каждого запроса. Установка значения 0 позволит сеансам сохраняться до тех пор, пока окно браузера не будет закрыто, однако это может иметь последствия для безопасности. Для большего контроля вы также можете использовать значения сеанса expiration и expires.

# Expiration date in epoch 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);

Я написал небольшой тестовый скрипт, чтобы убедиться, что он работает:

#!/usr/bin/env perl

use Mojolicious::Lite;
use Time::Local 'timegm';

# set some session variable
get '/test' => sub {
    my $self = shift;
    $self->session(
        expires => timegm(0, 0, 0, 4, 4, 142), # star wars day '42
        foo     => 42,
    );
    $self->render_text('foo is set');
};

use Test::More;
use Test::Mojo;
use Mojo::Cookie::Response;
my $t = Test::Mojo->new;

$t->get_ok('/test')->status_is(200)->content_is('foo is set');
my $cookies = Mojo::Cookie::Response->parse($t->tx->res->headers->set_cookie);
is $cookies->[0]->expires, 'Sun, 04 May 2042 00:00:00 GMT', 'right expire time';

done_testing;

Выход:

ok 1 - get /test
ok 2 - 200 OK
ok 3 - exact match for content
ok 4 - right expire time
1..4
person memowe    schedule 14.12.2012