#cakephp #cakephp-3.0 #cakephp-4.x
#cakephp #cakephp-3.0 #cakephp-4.x
Вопрос:
Название говорит само за себя, я думаю.
Я сталкивался с обоими и не знаю, какой из них мне следует использовать между $ _SESSION[‘Auth’] и $this-> Authentication-> getIdentity(). Является ли один безопаснее другого?
Спасибо,
Саймон
Ответ №1:
С CakePHP вы всегда должны использовать абстрактные API для доступа к любым суперглобальным данным $_POST
, таким как $_COOKIE
, $_SESSION
, и т.д..
Это рекомендуется по множеству причин, которые зависят от конкретной ситуации, но, как правило, это касается принципа инверсии зависимостей и развязки в целом, например. ваш код должен зависеть от абстракций, а не от конкретных, тогда, например, реализации могут меняться без нарушения вашего приложения. И хотя объект сеанса, объект запроса или компонент аутентификации не являются интерфейсами, они по-прежнему абстрагируют доступ к базовым данным (так сказать, конкретным).
Что-то, где необходимость в этом была бы применима в целом, было бы тестированием, за исключением объекта сеанса CakePHP, который должен записывать данные в $_SESSION
суперглобальный внутренний, другие суперглобальные, такие как $_GET
, $_POST
, $_COOKIE
и т.д., Не заполняются, если вы используете API, предоставляемый CakePHP, вместо этого данные записываются в запрособъект, который предоставляет данные через свой собственный API. Итак, если бы вы, например, имели прямой доступ $_POST
к своему коду, а затем передавали данные POST в тесте, например $this->post('/url', $postData)
, ваш код не видел бы данные, поскольку они попадали бы непосредственно в объект запроса вместо $_POST
суперглобального.
Что касается конкретного примера аутентификации, промежуточное программное обеспечение аутентификации могло получить идентификатор с данными неизвестно откуда, из сеанса, файлов cookie, токенов и т. Д., И аналогично оно может сохранять идентификатор в любом месте, сеансе, файлах cookie и т. Д., Внутренние слои вашего приложения не должнызаботьтесь о таких деталях реализации, они получают идентификатор через компонент или из объекта запроса, и все, им больше ничего не нужно знать, тогда вы можете легко изменить способ обработки аутентификации, не нарушая работу остальной части вашего приложения.