В CakePHP, в чем разница между $ _SESSION[‘Auth’] и аутентификацией-> getIdentity()?

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