[development] Add data to Drupal session
Salvatore De Paolis
iwkse at gmx.com
Tue Dec 8 16:42:38 UTC 2009
Hi,
I'm new to this mailing list, I hope is the right place to ask for such
questions.
I'm writing a module for drupal which implements a jabber client and hooks in
the appbar module.
The issue i'm having now is regarding the data used for jabber communication.
I'm using a jabber class and I need to store this object somewhere so that the
_init code is just executed one time.
I thought about sessions and I found a couple of ways, both don't works
properly for me.
First is using the global $user:
function jwclient_jabberclass_init() {
global $user;
if (!isset($user->jabclient) && $user->uid) {
require_once('jabber.php');
...
$jab = New Jabber($debug);
$jabclient = New JabberClient($jab);
$jabclient->jabber_client_set_user($user);
...
user_save($user, array('jabclient' => $jabclient));
}
}
function jwclient_init() {
jwclient_jabberclass_init();
...
}
function theme_jwclient_chat () {
global $user;
return $user->jabclient->status;
}
This solution gives me an errors of __PHP_Incomplete_Class Object.
Googling in understood that a proper way to save classes in session is to
fistly define the class and than call session_start. I don't see ways to
achieve this since the class I'm using is defined in a module and the
drupal session is already initiated.
A workaround i found on drupal.org is by using serialize/unserialize but it
doesn't work around for this case.
I changed the code in this way:
function jwclient_jabberclass_init() {
global $user;
if (!isset($user->jabclient) && $user->uid) {
require_once('jabber.php');
...
$jab = New Jabber($debug);
$jabclient = New JabberClient($jab);
$jabclient->jabber_client_set_user($user);
...
$jabclient = serialize($jabclient);
user_save($user, array('jabclient' => $jabclient));
}
}
function jwclient_init() {
jwclient_jabberclass_init();
...
}
function theme_jwclient_chat () {
global $user;
$jabclient = $user->jabclient;
$jabclient = unserialize($jabclient);
return $user->jabclient->status;
}
The result is: warning: unserialize() expects parameter 1 to be string, object
given
After this, i give away $user and tried with $_SESSION
function jwclient_jabberclass_init() {
global $user;
if (is_null($_SESSION['jabclient']) && $user->uid) {
require_once('jabber.php');
...
$jab = New Jabber($debug);
$jabclient = New JabberClient($jab);
$jabclient->jabber_client_set_user($user);
...
$_SESSION['jabclient'] = serialize($jabclient);
}
}
function jwclient_init() {
jwclient_jabberclass_init();
...
}
function theme_jwclient_chat () {
$jabclient = unserialize($_SESSION['jabclient']);
return $jabclient->status;
}
This attempt works on the first call. On the second call I get again the error
about __PHP_Incomplete_Class Object.
I'm out of clue now.
Anyone know how to manage the case of storing objects in session with drupal?
Thanks,
Salvatore
More information about the development
mailing list