Получить идентификатор сессии 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( @_ ) },
);
Я ценю любую рекомендацию, может быть, это возможно по-другому.
Спасибо.