Hi.
I have a big problem with MySQL sessions.
I'm using the following class to store the sessions into MySQL:
error_reporting(~E_NOTICE);
class session {
// session-lifetime
var $lifeTime;
function open($savePath, $sessName) {
// get session-lifetime
$this->lifeTime = 600; /*get_cfg_var("session.gc_maxlifetime")*/
// open database-connection
// return success
return true;
}
function close() {
$this->gc(600);
// close database-connection
return @mysql_close();
}
function read($sessID) {
// fetch session-data
$sql = mysql_query("SELECT session_data AS d FROM portal_sessions
WHERE session_id = '$sessID'
AND session_expires > ".time());
// return data or an empty string at failure
if($row = mysql_fetch_assoc($sql))
return $row['d'];
return "";
}
function write($sessID,$sessData) {
// new session-expire-time
$newExp = time() + $this->lifeTime;
// is a session with this id in the database?
$sql = mysql_query("SELECT * FROM portal_sessions
WHERE session_id = '$sessID'");
// if yes,
if( mysql_num_rows($sql) ) {
// ...update session-data
$sql = mysql_query("UPDATE portal_sessions
SET
session_expires = '$newExp',
session_data = '$sessData'
WHERE session_id = '$sessID'");
// if something happened, return true
if(mysql_affected_rows())
return true;
}
// if no session-data was found,
else {
// create a new row
$sql = mysql_query("INSERT INTO portal_sessions (
session_id,
session_expires,
session_data
)
VALUES(
'$sessID',
'$newExp',
'$sessData'
)");
// if row was created, return true
if( mysql_affected_rows() )
return true;
}
// an unknown error occured
return false;
}
function destroy($sessID) {
// delete session-data
$sql = mysql_query("DELETE FROM portal_sessions WHERE session_id = '$sessID'");
// if session was deleted, return true,
if( mysql_affected_rows() )
return true;
// ...else return false
return false;
}
function gc($sessMaxLifeTime) {
// delete old sessions
$sql = mysql_query("DELETE FROM portal_sessions WHERE session_expires < ".time());
// return affected rows
return mysql_affected_rows();
}
}
$session = new session();
session_set_save_handler(array(&$session,"open"),
array(&$session,"close"),
array(&$session,"read"),
array(&$session,"write"),
array(&$session,"destroy"),
array(&$session,"gc"));
session_name("sid");
session_start();
The sessions will be repeat nonstop!
For example it will be created 1 2 3 4 5 6 ... session!!!
I tested it in two server.
😕 😕 😕 😕 😕