在CakePHP中,$_SESSION ['Auth']和认证->getIdentity()之间有什么区别?

wn9m85ua  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(74)

Titlte说了我想的一切。
这两种方法我都遇到过,但我不知道应该在$_SESSION ['Auth']和$this-〉Authentication-〉getIdentity()之间使用哪一种。
谢谢你的好意,
西蒙

kyvafyod

kyvafyod1#

对于CakePHP,您应该始终使用抽象的API来访问任何超级全局数据,如$_POST$_COOKIE$_SESSION等。
建议这样做的原因有很多,具体取决于具体的情况,但一般来说,它有点触及依赖反转和解耦的原则,例如,你的代码应该依赖于抽象,而不是具体,然后,例如,实现可以在不破坏应用程序的情况下进行更改。虽然会话对象,请求对象,或身份验证组件不是接口,它们仍然抽象对底层数据的访问(可以说是具体的)。
通常需要这样做的地方是测试,除了CakePHP会话对象,它 * 必须 * 在内部将数据写入$_SESSION超级全局对象,如果使用CakePHP提供的API,则不会填充其他超级全局对象,如$_GET$_POST$_COOKIE等,而是将数据写入请求对象,它通过自己的API公开数据。因此,如果您直接在代码中访问$_POST,然后在$this->post('/url', $postData)之类的测试中传递POST数据,您的代码将看不到数据,因为它将直接进入请求对象,而不是$_POST超全局对象。
就身份验证示例而言,身份验证中间件可以从不知从何处获得的数据(会话、cookie、令牌等)获取身份,同样,它可以在任何地方持久保存身份(会话、cookie等),应用程序的内层不必关心这些实现细节,它们通过组件或从请求对象获取身份。这样,您就可以轻松地更改身份验证的处理方式,而不会中断应用程序的其余部分。

相关问题