If you are using CakePHP in conjunction with an existing PHP application, chances are you need to import the normal application’s session into cake.
- Create a file called session_import.php or something similar in your cake app/config directory with the following contents :
<?php if (!defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } if (!defined('ROOT')) { define('ROOT', dirname(dirname(dirname(__FILE__)))); } if (!defined('APP_DIR')) { define('APP_DIR', basename(dirname(dirname(__FILE__)))); } if (!defined('CAKE_CORE_INCLUDE_PATH')) { define('CAKE_CORE_INCLUDE_PATH', ROOT); } if (!defined('WEBROOT_DIR')) { define('WEBROOT_DIR', basename(dirname(__FILE__))); } if (!defined('WWW_ROOT')) { define('WWW_ROOT', dirname(__FILE__) . DS); } if (!defined('CORE_PATH')) { if (function_exists('ini_set')) { ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS); define('APP_PATH', null); define('CORE_PATH', null); } else { define('APP_PATH', ROOT . DS . APP_DIR . DS); define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS); } } include APP_PATH . 'config' .DS .'core.php'; include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'basics.php'; include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'config' . DS. 'paths.php'; include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'libs' . DS . 'object.php'; include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'libs' . DS . 'security.php'; include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'libs' . DS . 'session.php'; function init_framework($session) { $s = new CakeSession(null); $s = new CakeSession(null); $s->renew(); // Basic authentication information $s->write('User.id', $session['UserID']); // Write whatever session information you want to share with Cake } ?>
Set whatever session attributes you care about in the init_framework() function.
- Add the following to the end of your app/config/bootstrap.php file.
// Get the session from the original login if(isset($_COOKIE[PHP_SESSION_ID])){ session_id($_COOKIE[PHP_SESSION_ID]); } session_start();
Where PHP_SESSION_ID is the session id string you are using for cookies.
- Somewhere in your existing application (the most sensible place is probably just you have authenticated the user’s login), include your new cake session_import.php script (in my case the cake application is in a sub-folder called ext ) and initialise your framework.
// Initialise the framework sessions require_once $_SERVER['DOCUMENT_ROOT'] . '/ext/app/config/session_import.php'; init_framework($_SESSION);
Based on this post to the cake newsgroup – thanks to whoever posted it!
Search
3 Responses to “External Sessions in CakePHP”
- 1 Pingback on Mar 10th, 2008 at 12:17 am
Hm, try just adding
session_start();
at bootstrap.php and import your session variables from $_SESSION to $this->Session…
That would be more natural way ;)
acosonic, I can’t remember all the details but I don’t believe there was a $this->Session at the time i had to do this (over 2 years ago now). There’s probably a much easier way to do it these days :)