This looks like a good solution. What is the best way to list the current users, since the sesssionData seems to be serialized in the db or something? I just want to list out all the users from the db.
Thanks, Matt http://sweetphp.com "Greg Donald" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > On Fri, 2 Jul 2004 01:13:14 -0400, Matt Palermo <[EMAIL PROTECTED]> wrote: > > > > Is it possible to make a table of all logged in users session ids and then > > check to see if the session still exists every couple minutes? So every > > minute or two, it would go through the table and for each record it would > > get the session id, then check that session id to see if it's still in > > existance. Is this possible to do? > > This is simple to accomplish if you use database managed PHP sessions. > You can override the default PHP session handling functions with > session_set_save_handler() then you will know what users are logged in > by what sessions are still active. Here's how I do it: > > My sessions.php that I require in all other scripts on the site: > > <?php > > if(ini_get('session.use_trans_sid')==0){ > ini_set("session.use_trans_sid", 1); > } > > $sessionDbHandler = ''; > > function sessionOpen($save_path, $session_name){ > global $sessionDbHandler; > if(! $sessionDbHandler = mysql_pconnect(DB_HOST, DB_USER, DB_PASS)){ > die("Can't get sessionDbHandler: ".mysql_error()); > } > return true; > } > > function sessionClose(){ > return true; > } > > function sessionRead($key){ > $sql = " > select > sessionData > from > ".TB_USER_SESSIONS." > where > sessionID = '$key' > and > sessionExpire > UNIX_TIMESTAMP() > "; > $query = mysql_query($sql); > if(mysql_num_rows($query)){ > return mysql_result($query, 0, "sessionData"); > } > return false; > } > > function sessionWrite($key, $val){ > $value = addslashes($val); > $sql = " > replace into ".TB_USER_SESSIONS." ( > sessionID, > sessionData, > sessionExpire > ) values ( > '$key', > '$value', > UNIX_TIMESTAMP() + ".SITE_ONLINE_EXPIRE." > ) > "; > return mysql_query($sql); > } > > function sessionDestroy($key){ > $sql = " > delete from > ".TB_USER_SESSIONS." > where > sessionID = '$key' > "; > return mysql_query($sql); > } > > function sessionGarbageCollection(){ > $sql = " > delete from > ".TB_USER_SESSIONS." > where > sessionExpire < UNIX_TIMESTAMP() > "; > $query = mysql_query($sql); > return sqlAffectedRows(); > } > > session_set_save_handler("sessionOpen", "sessionClose", > "sessionRead", "sessionWrite", "sessionDestroy", > "sessionGarbageCollection"); > session_start(); > > ?> > > Some config.php variables: > define('DB_HOST', 'localhost'); > define('DB_DB', 'db_name'); > define('DB_USER', 'db_user'); > define('DB_PASS', 'db_pass'); > define('TB_USER_SESSIONS', 'userSessions'); > define('SITE_ONLINE_EXPIRE', 900); > > The table structure for userSessions looks like this: > > CREATE TABLE `userSessions` ( > `sessionID` varchar(32) NOT NULL default '', > `sessionData` text NOT NULL, > `sessionExpire` int(10) unsigned NOT NULL default '0', > PRIMARY KEY (`sessionID`) > ) TYPE=MyISAM; > > When a user logs in you are probably already setting some kind of > userID or userName, so make that a session variable if it is not > already. Then it's just a matter of listing the userNames or userIDs > out of the userSessions table. > > You might want to force session garbage collection at the top of each > script by calling sessionGarbageCollection(). That will make the > username listings more realtime. > > > -- > Greg Donald > http://destiney.com/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php