Mohan & me, we are working on the same project. And we have cracked the
Session sharing with cake and other applications. So a part of the
credit goes to him as well. memcached is a distant option for us, as we
cannot compile and install anything on the server(we will do that once
we have a dedicated server).

*warning* This is going to be long post. plus, spare my english.

Before going further, let me accept - this is an under-the-belt trick.
I welcome the gurus to better this code.
I have posted only the basic code to help anyone start off.

1. To inject a session into PHPBB (or any other application, even if it
doesnt follow OOP class methods).
create a vendor class in cake (/app/vendors/phpbb.php).
add the following code in that.

class PHPBB {

        var $userdata;
        var $sessionid;

        function login($user) {
                global $db, $phpbb_root_path, $phpEx, $userdata, $board_config,
$userdata, $user_ip;
                $phpbb_root_path = PHPBB_FORUM_PATH; //add it in your core.php
                include($phpbb_root_path . '');
                include($phpbb_root_path . 'common.'.$phpEx);
                $userdata = session_pagestart($user_ip, PAGE_INDEX);
                $this->userdata = $userdata;
                $autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;
                $admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0;
                $this->sessionid = session_begin($user, $user_ip, 0, FALSE,
$autologin, $admin);

        function logout($user) {
                global $db, $phpbb_root_path, $phpEx, $userdata, $board_config,
$userdata, $user_ip;
                $phpbb_root_path = APP . 'webroot' . DS .'forums' . DS;
                include($phpbb_root_path . '');
                include($phpbb_root_path . 'common.'.$phpEx);
                $userdata = session_pagestart($user_ip, PAGE_INDEX);
                session_end($userdata['session_id'], $userdata['user_id']);


2. in your controller (eg: users_controller.php) call vendors('phpbb');
3. after authenticating the user, before other session initialisation,
add this
$bb = new PHPBB();
// ... other code follows,

4. however, before adding any other session data, you have to do this.
because phpbb has polluted your session. (if someone has a better
technique, let me know)

$this->Session->write('', $this->User->data['User']['id']);

Thats it.
Now if you have to inject a CAKE Session from another application, its
a little more complex and its not fully tested. So I will be brief with
this one.
1. create a cake_inc.php in your app/config (you can put it anywhere,
but I think config is the best place)
2. add these defines and includes in that
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') . 
                  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.
include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'libs' . DS .

3. I am interested in injecting a session into cake, nothing else. add
these following lines:
include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'libs' . DS .
include CAKE_CORE_INCLUDE_PATH .DS . 'cake' . DS . 'libs' . DS .

4. Now you can call this cake_inc.php in your other application. In
phpBB, add at the top of page in login.php
include PATH_TO_CAKE_CONFIG . '/cake_inc.php';
after successful login , add this
$cakesession = new CakeSession(null);
$cakesession = new CakeSession(null);

5. Now go to your cake app's home page, you can see that user is logged

6. It would be worthwhile to poke around and see if you can launch a
controller or a model like this. then it would be easy to use cake with
other applications.

If you poke around and include required app_controllers & app_models (I
will try that later :))

cheers to Cake

You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at

Reply via email to