По-видимому, каждый ключ, который я сохраняю на сеансе 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
Дайте мне знать, если у вас возникли проблемы с введением пользовательского хранилища сеансов.