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

Reply via email to