Hi, I am an average programmer, i am having problems with a script which i took from [url=http://www.zend.com/zend/spotlight/code-gallery-wade8.php?article=code-gallery-wade8&kind=sl&id=2787&open=1&anc=0&view=1]Custom Session Handling[/url] I made some modification for my needs, but i am facing some problems, The script is executing twice and after 6 seconds its not removing the old sessions (which it should). What is wrong ? i am not getting, I am stuck and frustrated. any help would be greatly appreciated.Thanks in advance. DS [code] filname=testsession.php <?php /* Create new object of class */ ini_set("session.use_only_cookies",false); require_once("session_api.php"); $ses_class = new session(0.1); if (!isset ($_SESSION['counter'])) { $_SESSION['counter'] = 0; } $_SESSION['counter'] = $_SESSION['counter']+1; echo $_SESSION['counter']; echo "<br>"; echo $ses_class->ses_maxTime; echo "<br>"; echo ini_get ("session.gc_maxlifetime"); echo "<br>"; echo ini_get("session.use_only_cookies"); //*********TESTING******** $fwhandle = @fopen("test.txt","a"); if($fwhandle) { if (fwrite($fwhandle, "script called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** ?> filename=session_api.php <?php //http://www.zend.com/zend/spotlight/code-gallery-wade8.php?article=code-gallery-wade8&kind=sl&id=2787&open=1&anc=0&view=1 //http://us2.php.net/manual/en/function.session-set-save-handler.php#60316 //session_set_save_handler( // array("Session", "_open"), // array("Session", "_close"), // array("Session", "_read"), // array("Session", "_write"), // array("Session", "_destroy"), // array("Session", "_gc") // ) or die("Failed to register session handler"); // //session_start(); class Session { var $db_host = "www.somehost.com"; var $db_user = "username"; var $db_pass = "password"; var $db_dbase = "mysessions"; /* MySQL Table name for session */ var $ses_table = "sessions"; var $isdb_con = true; var $app_name = "dummy_name"; var $ses_maxTime=6; var $ses_onlyCookie; /* Class Constructor with max Time out of session in minutes */ function Session($minutes=0) { $in_secs = $minutes * 60; if($in_secs<=0) $this->ses_maxTime = ini_get("session.gc_maxlifetime"); else { ini_set("session.gc_maxlifetime",$in_secs); $this->ses_maxTime = $minutes * 60; } $this->ses_onlyCookie = ini_get("session.use_only_cookies"); //register_shutdown_function('session_write_close'); ini_set("session.gc_probability", 100); session_set_save_handler(array(&$this, '_open'), array(&$this, '_close'), array(&$this, '_read'), array(&$this, '_write'), array(&$this, '_destroy'), array(&$this, '_gc')); //Start the session session_start(); } /* Create a connection to a database */ function db_connect() { $mysql_connect = @mysql_pconnect ($this->db_host, $this->db_user, $this->db_pass); $mysql_db = @mysql_select_db ($this->db_dbase); if (!$mysql_connect || !$mysql_db) { return FALSE; } else { return TRUE; } } /* Open session, if you have your own db connection code, put it in here! */ function _open($path, $name) { //*********TESTING******** $fwhandle = @fopen("test.txt","a"); if($fwhandle) { if (fwrite($fwhandle, "_open method called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** if ($this->isdb_con == "Y") { $this->db_connect(); } return TRUE; } /* Close session */ function _close() { //*********TESTING******** $fwhandle1 = @fopen("test.txt","a"); if($fwhandle1) { if (fwrite($fwhandle1, "_close method called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle1); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** /* This is used for a manual call of the session gc function */ $this->_gc(0); return TRUE; } /* Read session data from database */ function _read($ses_id) { //*********TESTING******** $fwhandle2 = @fopen("test.txt","a"); if($fwhandle2) { if (fwrite($fwhandle2, "_read method called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle2); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** $session_sql = "SELECT * FROM " . $this->ses_table . " WHERE ses_id = '$ses_id'"; // echo "<br/>$session_sql<br/>"; $session_res = @mysql_query($session_sql); if (!$session_res) { return ''; } $session_num = @mysql_num_rows ($session_res); if ($session_num > 0) { $session_row = mysql_fetch_assoc ($session_res); if(isset($_SERVER['REMOTE_ADDR'])) $ipnum = "$_SERVER[REMOTE_ADDR]"; else $ipnum = ""; if($session_row["ip_number"] !=$ipnum) { //don't show anything return ''; } $ses_data = $session_row["ses_value"]; return $ses_data; } else { return ''; } } /* Write new data to database */ function _write($ses_id, $data) { //*********TESTING******** $fwhandle3 = @fopen("test.txt","a"); if($fwhandle3) { if (fwrite($fwhandle3, "_write method called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle3); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** $session_sql = "UPDATE " . $this->ses_table . " SET ses_time=" . time() . ", ses_value='$data' WHERE ses_id='$ses_id'"; echo "<br/>$session_sql<br/>"; $session_res = @mysql_query ($session_sql); if (!$session_res) { return FALSE; } if (mysql_affected_rows ()) { return TRUE; } if(isset($_SERVER['REMOTE_ADDR'])) $ipnum = "'$_SERVER[REMOTE_ADDR]'"; else $ipnum = Null; $session_sql = "INSERT INTO " . $this->ses_table . " (ses_id, ses_time, ses_start, ses_value,app_name,ip_number)" . " VALUES ('$ses_id', " . time() . ", " . time() . ", '$data','$this->app_name',$ipnum)"; // echo "<br/>$session_sql<br/>"; $session_res = @mysql_query ($session_sql); if (!$session_res) { return FALSE; } else { return TRUE; } } /* Destroy session record in database */ function _destroy($ses_id) { //*********TESTING******** $fwhandle4 = @fopen("test.txt","a"); if($fwhandle4) { if (fwrite($fwhandle4, "‘_destroy’ method called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle4); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** $session_sql = "DELETE FROM " . $this->ses_table . " WHERE ses_id = '$ses_id'"; $session_res = @mysql_query ($session_sql); if (!$session_res) { return FALSE; } else { return TRUE; } } /* Garbage collection, deletes old sessions */ function _gc($life) //ignore $life { //*********TESTING******** $fwhandle5 = @fopen("test.txt","a"); if($fwhandle5) { if (fwrite($fwhandle5, "‘_gc’ method called\n") === FALSE) echo "Cannot write to file"; fclose($fwhandle5); } else echo "Cannot open to write file"; //*********CLOSE TESTING******** $strtim ="-". $this->ses_maxTime ." seconds"; $ses_life = strtotime($strtim); $session_sql = "DELETE FROM " . $this->ses_table . " WHERE ses_time < $ses_life and app_name='$this->app_name'"; echo "<br/>$session_sql<br/>"; $session_res = @mysql_query ($session_sql); if (!$session_res) return FALSE; //also see all sessions for max of 24 hours (default) $strtim1 ="-". get_cfg_var("session.gc_maxlifetime") ." seconds"; $ses_life1 = strtotime($strtim1); $session_sql1 = "DELETE FROM " . $this->ses_table . " WHERE ses_time < $ses_life1"; $session_res1 = @mysql_query ($session_sql1); if (!$session_res1) return FALSE; else return TRUE; } } ?> [/code]