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

时间:2012-09-15 14:24:47

标签: php cakephp

我之前读过这篇文章: Generally splitting admin and web app into two entities

基本上,它的要点是我们可以在一个cakephp应用程序中将事物的api方面和事物的Web前端组合在一起。但是,正如您所知,REST是无状态的,并且没有理由期望客户端保留cookie或类似的东西。你们知道session_start函数究竟何时在CakePHP中获得触发器吗?当我的API端点被击中时,我真的想避免运行session_start。但是,当我的常规Web前端被击中时,我需要启动会话。

2 个答案:

答案 0 :(得分:1)

对于cake v2 +,一般执行以下任何操作:

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

如果您仍在开始会话(可以通过在响应标头中获取cookie来判断),则可以轻松找到启动会话的人员。只需在lib/Cake/Model/Datasource/CakeSession.php方法中将以下行添加到start()

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

提出请求,你会看到罪魁祸首是谁的调用堆栈:)

答案 1 :(得分:0)

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