ndorfnz Posted August 7, 2010 Share Posted August 7, 2010 Working on changing sessions to be stored in db. Using example I found on Internet. Works for the most part, however it's driving me nuts that my username is being stored as data|s:6:"bertha"; vs. just the username bertha. I've read where the session_set_save_handler is "serializing" the data by default. In any case, I want to get at the username entered to ensure I keep my users logged in, etc. I've tried to "unserialize" the entry but it always returns false! MANY THANKS!! The code is below: //************************************************************************************* //Variables used through out the script - CHANGE TO A GENERAL FILE AND INCLUDE IT... //**************************************************************** $server = "blah"; // Server Name $userid = "blah"; // Username $pass = "blah"; //Password $database = "blah"; // Database Name //**************************************************************** //**************************************************************** //Make server and database connections //**************************************************************** $con = mysql_connect("$server",$userid,$pass) or die ("Connection Error to Server"); $db = mysql_select_db("$database",$con) or die("Connection Error to Database"); //========================================================================================== class SessionManager { var $life_time; function SessionManager() { // Read the maxlifetime setting from PHP $this->life_time = get_cfg_var("session.gc_maxlifetime"); // Register this object as the session handler session_set_save_handler( array( &$this, "open" ), array( &$this, "close" ), array( &$this, "read" ), array( &$this, "write"), array( &$this, "destroy"), array( &$this, "gc" ) ); } function open( $save_path, $session_name ) { global $sess_save_path; $sess_save_path = $save_path; // Don't need to do anything. Just return TRUE. return true; } function close() { return true; } //READ DATA function read( $id ) { // Set empty result //$data = ''; // Fetch session data from the selected database $time = time(); $newid = mysql_real_escape_string($id); $sql = "SELECT `session_data` FROM `sessions` WHERE `session_id` = '$newid' AND `expires` > $time"; $rs = mysql_query($sql); $a = mysql_num_rows($rs); if($a > 0) { $row = mysql_fetch_assoc($rs); $data = $row['session_data']; } return $data; } //WRITE DATA function write( $id, $data ) { //unserialize($data); //echo $data; // Build query $time = time() + $this->life_time; $newid = mysql_real_escape_string($id); //base64_encode(serialize $newdata = mysql_real_escape_string($data); $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid','$newdata', $time)"; $rs = mysql_query($sql); //var_dump($_SESSION); return TRUE; } function destroy( $id ) { // Build query $newid = mysql_real_escape_string($id); $sql = "DELETE FROM `sessions` WHERE `session_id` = '$newid'"; mysql_query($sql); return TRUE; } function gc() { // Garbage Collection // Build DELETE query. Delete all records who have passed the expiration time $sql = 'DELETE FROM `sessions` WHERE `expires` < UNIX_TIMESTAMP();'; mysql_query($sql); // Always return TRUE return true; } }?> The calling page contains: require_once("sessions.php"); $sess = new SessionManager(); session_start(); Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.