Re: Session Vars and Performance

From: Date: Wed, 16 Feb 2005 18:20:19 +0000
Subject: Re: Session Vars and Performance
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-208860@lists.php.net to get a copy of this message
On Wed, 16 Feb 2005 09:36:26 -0800 (PST), Richard Lynch <ceo@l-i-e.com> wrote: > It's literally an hour's work to alter the code to use MySQL to store the > sessions instead of the hard drive. Not really, maybe 5 minutes.. here's the code: Make the table in your database: CREATE TABLE sessions ( id varchar(32) NOT NULL default '', data text NOT NULL, expire int(11) unsigned NOT NULL default '0', PRIMARY KEY (id) ); Make a sessions.php file: <?php // MySQL database connection parameters: $dbhost = 'localhost'; $dbuser = 'dbuser'; $dbpasswd = 'dbpassword'; $dbname = 'dbname'; // Sessions table name: $tb_sessions = 'sessions'; // Session lifetime in seconds: $online_expire = 900; // Use transparent sessions: ini_set( 'session.use_trans_sid', 1); // Below here should not require any changes $sdbh = ''; function sess_open( $save_path, $session_name ) { global $sdbh; if( ! $sdbh = mysql_pconnect( $dbhost, $dbuser, $dbpasswd ) ) { echo mysql_error(); exit(); } return true; } function sess_close() { return true; } function sess_read( $key ) { global $sdbh, $dbname, $tb_sessions; $sql = " SELECT data FROM $tb_sessions WHERE id = '$key' AND expire > UNIX_TIMESTAMP() "; $query = mysql_query( $sql ) or die( mysql_error() ); if( mysql_num_rows( $query ) ) { return mysql_result( $query, 0, 'data' ); } return false; } function sess_write( $key, $val ) { global $tb_sessions, $online_expire; $value = addslashes( $val ); $sql = " REPLACE INTO $tb_sessions ( id, data, expire ) VALUES ( '$key', '$value', UNIX_TIMESTAMP() + $online_expire ) "; return mysql_query( $sql ) or die( mysql_error() ); } function sess_destroy( $key ) { global $tb_sessions; $sql = " DELETE FROM $tb_sessions WHERE id = '$key' "; return mysql_query( $sql ) or die( mysql_error() ); } function sess_gc() { global $tb_sessions; $sql = " DELETE FROM $tb_sessions WHERE expire < UNIX_TIMESTAMP() "; $query = mysql_query( $sql ) or die( mysql_error() ); return mysql_affected_rows(); } session_set_save_handler( 'sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc' ); session_start(); $sn = session_name(); $sid = session_id(); ?> Then you just do include( 'sessions.php' ); http://wiki.destiney.com/DBSessions/Install -- Greg Donald Zend Certified Engineer http://destiney.com/

« previous php.general (#208860) next »