По-видимому, каждый ключ, который я сохраняю на сеансе Symfony2, находится под подразделением:
$session->set('foo', 'bar');
Это приведет к:
array('_sf2_attributes' => array('foo' => 'bar'));
Это проблема, потому что я создаю приложение, которое взаимодействует с устаревшим кодом. Я хочу использовать обработчик сеансов Symfony, но я хочу, чтобы старые части приложения могли читать из $_SESSION
. Другими словами, я хочу
$session->set('foo', 'bar');
а также
$_SESSION['foo'] = 'bar';
иметь тот же эффект.
Я не видел какой-либо опции конфигурации для этого. Я использую специальный обработчик сеанса, который я установил
session: handler_id: my_app.session_handler
Поэтому не будет проблемой, что Symfony использует другое имя сеанса. Единственное решение, о котором я могу думать, это создать новый класс обработчика сеанса вокруг моего обработчика сеанса клиента ( my_app.session_handler
), который проверяет, пытается ли приложение получить доступ к _sf2_attributes
но я думаю, что это очень уродливо, и я даже не уверен, что сработает.
Благодаря!
Это не только обработчик, который вы должны реализовать самостоятельно, но также должен быть вашим SessionStorage
.
По умолчанию Symfony2 использует NativeSessionStorage
. Вы должны искать метод loadSession()
. Как вы можете видеть, он инициализирует сеанс с помощью $key
полученного от getStorageKey()
, который инициализируется здесь _sf2_attributes
здесь – в AttributeBag
Дайте мне знать, если у вас возникли проблемы с введением пользовательского хранилища сеансов.