Sessions manage and customization is very easy in CakePHP. Setting and configuration come out of the box so basically you don’t need to configure at all. But still at some point we need customization like, if we need some changes in php.ini or want to store session in a different place.
You can manage session, write custom handler, add option to save on different places, override php.ini settings.
Contents
Write Your Own Custom Handler For Sessions in Cake:
To Save Session With Setting in php.ini:
Configure::write('Session', array( 'defaults' => 'php' ));
This is the default setting that comes out of the box by CakePHP.
To Save Session Inside Cake tmp Folder:
Configure::write('Session', array( 'defaults' => 'cake' ));
This is required in a host where it does not allow you to write outside your home directory.
To Save Session in Database:
Configure::write('Session', array( 'defaults' => 'database' ));
This uses a built-in database defaults. It stores session in ‘cake_sessions’ table.
So you need to create a table for this:
CREATE TABLE `cake_sessions` ( `id` varchar(255) NOT NULL DEFAULT '', `data` text, `expires` int(11) DEFAULT NULL, PRIMARY KEY (`id`) );
But you can specify you own session handler to store session using a different model:
Configure::write('Session', array( 'defaults' => 'database', 'handler' => array( 'model' => 'MyCakeSession' ) ));
Create ‘MyCakeSession’ model at app/Model/MyCakeSession.php And create ‘my_cake_sessions’ table:
CREATE TABLE `my_cake_sessions` ( `id` varchar(255) NOT NULL DEFAULT '', `data` text, `expires` int(11) DEFAULT NULL, PRIMARY KEY (`id`) );
This will save session ‘my_cake_sessions’ using MyCakeSession model.
To Save Session in Cake Cache:
Configure::write('Session', array( 'defaults' => 'database' ));
Making Session Persist Across All Sub-Domains:
- Add below in bootstrap:
ini_set(‘session.cookie_domain’, env(‘HTTP_BASE’)); - This changes the default, that only the domain generating a session can access, to all sub-domains.
- You don’t need to make core Security.level to low or medium.
- You can also use php, cake, database or cache in core Session default to persist session in all sub-domains.
Troubleshoot:
- When you test with the session management you might get error: “cakephp 404 The request has been black-holed”.
- Try clear tmp/cache/, tmp/cache/models, tmp/cache/persistent, tmp/sessions.
- Try clear browser cookie and cache.
- Check core Session configurations.
Always try to clear browser cookie, cache before doing changes in core Session or php.ini configuration.
Other Session configuration that can be done are cookie name, timeout, cookieTimeout, checkAgent, autoRegenerate, and other ini values like cookie_secure, cookie_path, cookie_httponly.
See Also : How to migrate CakePHP 1.x to 2.x
Like this blog? I’d love to hear about your thoughts on this. Thanks for sharing your comments.