5

我之前读过这篇文章: 一般将管理员和网络应用程序分成两个实体

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

4

2 回答 2

1

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

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

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

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

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

于 2013-01-22T17:16:11.710 回答
0

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

于 2013-01-17T08:09:09.970 回答