Получить идентификатор сессии Plack в фоновом потоке

Извините, я действительно пытался, но я не могу найти решение этой простой проблемы.

Мне нужно получить сессию id в стеке, но не через браузер, я хочу сделать внутренний фон в основном коде Perl.

Это мой код:

#!/usr/bin/perl 
use Plack::Builder;
use YAML;
use Plack::Session::Store::File;

my $app = sub {
    my $env = shift;
    #$global = 'write thsi text to file';
    $global = $env->{'psgix.session.options'}{id};
    return [ 200, [], [ "App session ID: " . $global ] ];
};
$app->();

open my $fileHandle, ">>", "file" or die "Can't open '\n";
print $fileHandle $global;
close $fileHandle;

my $id = sub {
    my $env = shift;
    return [ 200, [], [ 'The ID session is: ' . $global ] ];
};

builder {
    enable 'Session', store => Plack::Session::Store::File->new(
                dir => './sessiondir',
                serializer   => sub { YAML::DumpFile( reverse @_ ) },
                deserializer => sub { YAML::LoadFile( @_ ) },
            );
    mount '/id' => $id;
    mount '/' => $app;

};

Если я посещаю корневой путь http://192.168.1.1:5000/, я получаю:

App session ID: 33d2e5c9fc9d57ca79679675130d7a06b7ccc1f6

Если я посещу http://192.168.1.1:5000/id

The ID session is: 33d2e5c9fc9d57ca79679675130d7a06b7ccc1f6

Я хочу записать идентификатор сессии в файл из переменной $global:

open my $fileHandle, ">>", "file" or die "Can't open '\n";
print $fileHandle $global;
close $fileHandle;

В файле назначения я ничего не получаю, но если я изменяю переменную на это, это работает:

#$global = 'write thsi text to file';

Может быть, проблема в том, что этот текст:

Потоки в пуле потоков управляются системой. Эти потоки не привязаны к текущему запросу. Поэтому сессия для них недоступна.

Источник: Могу ли я получить доступ к сеансам в фоновом потоке?

Моя цель просто получить идентификатор и открыть этот файл, чтобы делать другие вещи из фона. Я хочу избежать сохранения другого файла в этой простой задаче, избегать SQL и т. Д.

Потому что я уже сохраняю данные сессии в файл:

enable 'Session', store => Plack::Session::Store::File->new(
                dir => './sessiondir',
                serializer   => sub { YAML::DumpFile( reverse @_ ) },
                deserializer => sub { YAML::LoadFile( @_ ) },
            );

Я ценю любую рекомендацию, может быть, это возможно по-другому.

Спасибо.

0 ответов

Другие вопросы по тегам