2017-02-02 3 views
2

Я вижу довольно некоторые фреймворки и CMS, которые используют собственную реализацию сеанса вместо собственного драйвера сеанса PHP. Все по их собственным причинам.Каким образом фреймворки со своей собственной сессионной реализацией имеют дело с третьей стороной?

Примерами являются Wordpress, Laravel, CakePHP (несколько).

Что мне интересно, если они устанавливают cookie вручную и выполняют сеанс самостоятельно, как они взаимодействуют с пакетами thirdparty?

Пакеты композитора Thirdparty могут взаимодействовать с по умолчанию $_SESSION и могут попытаться установить переменные сеанса, в то время как $_SESSION полностью не используется.

Все еще с такими фреймворками, как Laravel, из того, что я помню, по-прежнему прекрасно взаимодействует с пакетами thirdparty, и все они попадают в их собственную реализацию сеанса.

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

редактировать

Примером пакета может третью сторону представлять собой PHP DebugBar, который может считывать данные из $ _SESSION и вставить свою собственную переменную, если это необходимо. Я знаю, что у таких фреймворков, как Laravel, есть своя собственная версия debugbar, которая не взаимодействует с родным $_SESSION.

Я предполагаю, что хочу знать, можно ли полностью реализовать свою собственную реализацию $_SESSION без особых проблем.

ответ

1

Возможно, это не идеальный ответ, но, по крайней мере, я выяснил, что я не знаю, как справиться с выполнением пользовательских сессий & последней установки Laravel.

В Laravel 5.6 $_SESSION глобальный не существует. Существует сессия, однако при использовании Session::all() он возвращает токен сессии. Это логично.

Route::get('/', function() { 
    dump(Session::all()); 
    dd($_SESSION); 
    return view('welcome'); 
}); 

Возвращает

array:3 [▼ 
    "_token" => "G22ETumV1CQoolo2sAV0SA4wWmxFrZjTXTli7ico" 
    "_previous" => array:1 [▼ 
    "url" => "http://127.0.0.1:8000" 
    ] 
    "_flash" => array:2 [▼ 
    "old" => [] 
    "new" => [] 
    ] 
] 

И dd

ErrorException in web.php line 16: 
Undefined variable: _SESSION 

Из моего собственного тестирования моего вывода, если пакет композитора, который взаимодействует с Sessions не реализует Laravel ServiceProvider не будет способный делать что угодно с сеансом.

Надеюсь, что это будет полезным ответом.

+0

Полезно спасибо. Я пишу собственную собственную реализацию обработчика сеанса, но это своего рода гибрид с 'session_set_save_handler()' желательно, я хотел бы полностью избавиться от '$ _SESSION'. Я думаю, что это может быть жизнеспособным, потому что многие большие рамки не имеют проблем с этим, и вряд ли какие-либо пакеты третьей стороны взаимодействуют с '$ _SESSION. Спасибо, что нашли время, чтобы прочитать мой вопрос. –

+0

Ваш прием @ Stephan-v может быть полезен для погружения в [источник] (https://github.com/laravel/framework/tree/master/src/Illuminate/Session) – Ken

+1

Имейте в виду, что Laravel использует сеансы на основе файлов (по умолчанию) он даже не использует никаких собственных обработчиков сеансов PHP. (Symfony имеет собственный драйвер сеанса, который взаимодействует с сеансом) – Ken

Смежные вопросы