note 81761 added to function.session-set-save-handler

From: Date: Wed, 12 Mar 2008 20:01:19 +0000
Subject: note 81761 added to function.session-set-save-handler
Groups: php.notes 
Request: Send a blank email to php-notes+get-136980@lists.php.net to get a copy of this message
An tested example with static class. Initiated from maria at junkies dot jp comment. <?php /** * PHP session handling with MySQL-DB * * Created on 12.03.2008 * @license http://www.opensource.org/licenses/cpl.php Common Public License 1.0 */ class Session { /** * a database connection resource * @var resource */ private static $_sess_db; /** * Open the session * @return bool */ public static function open() { if (self::$_sess_db = mysql_connect('localhost', 'root', '')) { return mysql_select_db('my_application', self::$_sess_db); } return false; } /** * Close the session * @return bool */ public static function close() { return mysql_close(self::$_sess_db); } /** * Read the session * @param int session id * @return string string of the sessoin */ public static function read($id) { $id = mysql_real_escape_string($id); $sql = sprintf("SELECT session_data FROM sessions " . "WHERE session = '%s'", $id); if ($result = mysql_query($sql, self::$_sess_db)) { if (mysql_num_rows($result)) { $record = mysql_fetch_assoc($result); return $record['session_data']; } } return ''; } /** * Write the session * @param int session id * @param string data of the session */ public static function write($id, $data) { $sql = sprintf("REPLACE INTO sessions VALUES('%s', '%s', '%s')", mysql_real_escape_string($id), mysql_real_escape_string(time()), mysql_real_escape_string($data) ); return mysql_query($sql, self::$_sess_db); } /** * Destoroy the session * @param int session id * @return bool */ public static function destroy($id) { $sql = sprintf("DELETE FROM sessions WHERE session = '%s'", $id); return mysql_query($sql, self::$_sess_db); } /** * Garbage Collector * @param int life time (sec.) * @return bool * @see session.gc_divisor 100 * @see session.gc_maxlifetime 1440 * @see session.gc_probability 1 * @usage execution rate 1/100 * (session.gc_probability/session.gc_divisor) */ public static function gc($max) { $sql = sprintf("DELETE FROM sessions WHERE session_expires < '%s'", mysql_real_escape_string(time() - $max)); return mysql_query($sql, self::$_sess_db); } } //ini_set('session.gc_probability', 50); ini_set('session.save_handler', 'user'); session_set_save_handler(array('Session', 'open'), array('Session', 'close'), array('Session', 'read'), array('Session', 'write'), array('Session', 'destroy'), array('Session', 'gc') ); if (session_id() == "") session_start(); //session_regenerate_id(false); //also works fine if (isset($_SESSION['counter'])) { $_SESSION['counter']++; } else { $_SESSION['counter'] = 1; } echo '<br/>SessionID: '. session_id() .'<br/>Counter: '. $_SESSION['counter']; ?> And don't miss the table dump. ^^ CREATE TABLE IF NOT EXISTS sessions ( session varchar(255) character set utf8 collate utf8_bin NOT NULL, session_expires int(10) unsigned NOT NULL default '0', session_data text collate utf8_unicode_ci, PRIMARY KEY (session) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ---- Server IP: 212.124.37.9 Probable Submitter: 217.93.1.30 ---- Manual Page -- http://www.php.net/manual/en/function.session-set-save-handler.php Edit -- https://master.php.net/note/edit/81761 Del: integrated -- https://master.php.net/note/delete/81761/integrated Del: useless -- https://master.php.net/note/delete/81761/useless Del: bad code -- https://master.php.net/note/delete/81761/bad+code Del: spam -- https://master.php.net/note/delete/81761/spam Del: non-english -- https://master.php.net/note/delete/81761/non-english Del: in docs -- https://master.php.net/note/delete/81761/in+docs Del: other reasons-- https://master.php.net/note/delete/81761 Reject -- https://master.php.net/note/reject/81761 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#136980) next »