【问题标题】:CakePHP session refreshes at each requestCakePHP 会话在每个请求时刷新
【发布时间】:2013-06-11 23:57:08
【问题描述】:

我正在开发我的第一个带有 CakePHP 2.3 的应用程序,我在登录时遇到了问题(没有身份验证错误),但我的会话没有持续,所以我被送回登录页面当Auth->redirect() 被调用时。我确定我只是遗漏了一个设置或配置了一些稍微错误的东西,但我一直没能找到它。

# core.php
# session record is written the the database, but the same record's id changes w/ every request
Configure::write('Session', array(
  'defaults' => 'database',
));

Configure::write('Security.level', 'medium');

我尝试调整各种Session.X 参数,但没有任何改变。我在 AppController 中使用 bcrypt 身份验证和以下设置:

'Auth' => array(
  'authenticate' => array(
    'Blowfish' => array(
      'fields' => array( 'username' => 'email' ),
      'scope'  => array( 'active' => '1' )
    ),
  ),
  'authorize' => array( 'Controller' ),
  'loginAction'    => array( 'admin' => false, 'controller' => 'users', 'action' => 'login' ),
  'loginRedirect'  => array( 'admin' => true, 'controller' => 'activities', 'action' => 'index' ),
  'logoutRedirect' => array( 'admin' => false, 'controller' => 'users', 'action' => 'login' ),
),

我错过了什么?

更新

意识到这仅发生在我的开发环境中,我比较了我的 Cake 配置(数据库、核心、引导程序)和 php.ini 值——没有差异。我被难住了。

【问题讨论】:

  • 可能在 users_controller 中没有重定向?
  • 不,重定向正在发生。
  • 无论如何,我都会重定向到主页 (/),该主页 (/) 路由到 /admin/activities/index。在实际重定向之前的调试验证我应该去我期望的地方。
  • 您确定是会话被删除,而不是您无权进入页面,因此它会重定向您吗?
  • @Nunser - 并不是会话被删除。我在本地工作并将会话保存到数据库。当我第一次进入时,我会得到一个会话记录。当我登录时,我仍然有一个会话记录,但 ID 不同。

标签: cakephp cakephp-2.3


【解决方案1】:

神圣的头,蝙蝠侠。

所以这就是问题所在。我将会话存储在数据库中。不知何故,一个(显然)自动化的过程将cake_sessions.data字段更改为cake_sessions.DATA。尽管我在调试时查看了数据库一千次,但我只是注意到了这种差异。

问题解决了。

故事的寓意:开发人员,不要让您的数据库字段名称长大并改变大小写。

【讨论】:

    【解决方案2】:

    您还需要将“会话”设置为组件。

    【讨论】:

    • 它就在那里。我可能应该在原始问题中包含我在AppController 中设置的整个$components 数组,但是Session 组件在那里。
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2017-06-17
    • 2020-07-13
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多