代码之家  ›  专栏  ›  技术社区  ›  Leo

CakePHP的身份验证超时问题

  •  4
  • Leo  · 技术社区  · 15 年前

    我真的很烦。已经好几年了。不管我怎么处理核心.php或者php.ini文件,我的登录通常在大约一小时后超时。一些相同代码和配置的部署会在相当长的时间后超时。

    这是我目前在一个网站上看到的-大约一小时后超时:

    session.gc_divisor  1000
    session.gc_maxlifetime  86400
    session.gc_probability  1
    
    Configure::write('Session.timeout', '28800');
    Configure::write('Session.checkAgent', false);
    Configure::write('Security.level', 'medium');
    

    还有一个-持续了一整晚:

    session.gc_divisor  100
    session.gc_maxlifetime  14400
    session.gc_probability  0
    
    Configure::write('Session.timeout', '315360000');
    Configure::write('Session.checkAgent', false);
    Configure::write('Security.level', 'medium');
    

    现在,在你兴奋地说,“答案就在会话超时“价值”,让我告诉你,这个网站通常超时后约二十分钟!

    3 回复  |  直到 15 年前
        1
  •  4
  •   Leo    15 年前

    CakePHP提供了配置会话处理方式的选项。在 core.php 我把这个改成了 'cake' (默认情况下为 'php' ):

    /**
     * The preferred session handling method. Valid values:
     *
     * 'php'            Uses settings defined in your php.ini.
     * 'cake'       Saves session files in CakePHP's /tmp directory.
     * 'database'   Uses CakePHP's database sessions.
     */
    Configure::write('Session.save', 'cake');
    

    /**
     * Session time out time (in seconds).
     * Actual value depends on 'Security.level' setting.
     */
    Configure::write('Session.timeout', '86400');
    

    到目前为止,系统还没有注销。

        2
  •  2
  •   Rowlf    15 年前

    我不认为这是一个蛋糕特定的事情;我见过它时,没有框架涉及-这很可能是一个问题与您的PHP配置设置。

    1. 指定要存储的专用路径 中的会话 session.save_path 如果你还没有这么做。 不要将它们存储在/tmp中-其他进程可能会出现并擦除它们

    2. 确保(我的意思是 真正地 当然)这是 session.gc_maxlifetime 是您所认为的(86400,如果您希望您的登录在24小时不活动后超时,等等)。与相同 session.gc_divisor session.gc_probability . 即使 PHP Manual 指定可以在任何级别上设置会话设置,这取决于PHP构建的dodgeness(它们都有一些细微的缺陷:)。除非在全局php.ini文件文件而不是代码中的.htaccess等。只需在实际应用程序中输出它们,以确保它们已应用。

    3. 另外,根据您的环境,检查PHP CLI构建是否使用相同的方法php.ini文件文件作为默认PHP构建-如果CLI构建使用另一个配置文件,并且您有使用CLI构建的cron作业,cron作业脚本可能会调用会话清理过程。

        3
  •  1
  •   Gautier Drusch    9 年前

    如果您在同一台服务器上有许多CakePHP应用程序,这可能是您遇到麻烦的原因。别忘了:

    1. 为每个应用程序添加不同的前缀($Prefix on)核心.php).
    2. Configure::write('Session', array(
      'defaults' => 'php',
      'timeout' => 4320,
      'ini' => array(
          'session.cookie_path' => '/name_app', // this for each app
      )));