CakePHP 2.x sessions behaving inconsistently betwe

2019-01-26 01:40发布

问题:

I have a CakePHP 2.x site I'm working on which performs as intended locally. Login works, session flash messages work, etc. When I push the code to my staging/prod server it's breaking.

Logins no longer work, no session flash messages appear, some controller actions that should be redirecting to /user/login are displaying nothing (empty document), etc.

I'm at a loss as to what the problem would be. Based on the issues I'm experiencing and some searching I've done I believe I've ruled out problems like whitespace after the closing ?> in a code-only PHP file (controllers). I'm using DB sessions, and I see session records being created in the DB on my local instance, but not on the remote staging/prod instance.

Any assistance would be much appreciated. Thanks.

回答1:

In you app/Config/core.php check out these thing.

  1. If you are using SSL and non-SSL based protocols, make sure you have cookie_secure set as false.

    Configure::write('Session', array(
       'defaults' => 'php',
       'ini' => array(
           'session.cookie_secure' => false
       )
    ));
    
  2. Try changing Session's configuration from php defaults to cake or db as

    Configure::write('Session', array(
        'defaults' => 'php', // change 'php' to 'cake' or 'database'
        'cookie' => 'my_app',
        'timeout' => 4320 //3 days
    ));
    
  3. Also try setting Session.checkAgent to false, just for once to ensure if it is a browser issue.

  4. Try changing Session.name of your session, it defaults to 'CAKEPHP'

    Configure::write('Session', array(
        'name' => 'New-Session-name'
        'defaults' => 'php', // change 'php' to 'cake' or 'database'
        'cookie' => 'my_app',
        'timeout' => 4320 //3 days
    ));
    
  5. Remove all cache files from all sub-directories of /app/tmp

  6. Set debug level higher to 1, to do cache refresh. If you still don't see an error, try setting error_reporting to true in php.ini. (Although, this one is very obvious I am still pointing it out in case you might have missed it out)

Hope this helps



回答2:

One of the recommendations I came across frequently was to ensure that there was no whitespace after the closing PHP tag in a code-only file (or preferably to not actually have a closing PHP tag). Checking all my files showed that to be the case. Somehow, however, I managed to put a single line break before the opening PHP tag in AppController.php and that was the issue. My apologies to anyone who wasted time on this. I just hope this helps someone in the future who clumsily makes the same mistake.