在构建REST API时,如何在CakePHP中管理会话启动


How to manage the session start in CakePHP when building a REST API?

我之前读过这篇文章:通常将管理员和web应用程序拆分为两个实体

基本上,它的要点是,我们可以在一个cakepp应用程序中将事物的api端和web前端结合在一起。然而,正如您所知,REST是无状态的,没有理由期望客户端保留cookie或类似的东西。你们知道在CakePHP中session_start函数是什么时候触发的吗?当我的API端点被击中时,我真的想避免运行session_start。然而,当我的常规网络前沿受到攻击时,我需要开始会话。

对于cake v2+,通常执行而不是执行以下任何操作:

  • 调用CakeSession
  • 加载会话组件或使用会话助手
  • 从布局中删除$this->session->flash()
  • 不要使用auth组件

如果您仍在启动会话(可以通过在响应标头中获取cookie来判断),那么很容易跟踪谁在启动会话。只需在start()方法中的lib/Cake/Model/Datasource/CakeSession.php中添加以下行:

public static function start() {
  debug_print_backtrace();
  exit();
  ...
}

发出请求后,您将看到罪魁祸首的调用堆栈:)

session_start()CORE'Cake'Model'Datasource'CakeSession.php中被触发。如果您不想触发session_start(),请确保不要在控制器中包含会话组件或助手。此外,请确保不要调用会话或使用Auth组件,因为在某些情况下,它也可以自动触发session_start()