问题描述
标题说明了我的想法。
这两个我都遇到过,但不知道应该在 $_SESSION['Auth'] 和 $this->Authentication->getIdentity() 之间使用哪一个。一个比另一个更安全吗?
谢谢,
西蒙
解决方法
使用 CakePHP,您应该始终使用抽象的 API 来访问任何超全局数据,例如 $_POST
、$_COOKIE
、$_SESSION
等。
建议这样做的原因有很多,具体取决于具体情况,但通常它有点触及依赖倒置和一般解耦的原则,例如。你的代码应该依赖于抽象,而不是具体,然后例如实现可以改变而不会破坏你的应用程序。虽然会话对象、请求对象或身份验证组件不是接口,但它们仍然抽象了对底层数据的访问(可以这么说)。
通常需要这种情况的地方是测试,除了 CakePHP 会话对象,它必须在内部将数据写入 $_SESSION
超全局变量,其他超全局变量如 {如果您使用 CakePHP 提供的 API,则不会填充 {1}}、$_GET
、$_POST
等,而是将数据写入请求对象中,该对象通过自己的 API 公开数据.因此,例如,如果您要直接在代码中访问 $_COOKIE
,然后在像 $_POST
这样的测试中传递 POST 数据,则您的代码将看不到数据,因为它会直接落在请求中对象而不是 $this->post('/url',$postData)
超全局变量。
就身份验证示例而言,身份验证中间件可以通过谁知道在哪里的数据、会话、cookie、令牌等获取身份,同样它可以在任何地方持久化身份、会话、cookie等,你的应用程序的内层不应该关心这样的实现细节,他们通过组件获取身份,或者从请求对象中获取身份,就是这样,他们不需要知道其他任何事情,那么你可以轻松更改身份验证的处理方式,而不会破坏应用程序的其余部分。