我之前读过这篇文章:通常将管理员和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()
。