Hallo,
ich wollte eigentlich die Sessions in der Datenbank verwalten um das lästige weiterreichen der Session-Id in Cookies oder Url zu verhindern.
Ich hab mich in die Thematik eingelesen, und die Session-verwaltung so umgesetzt! Geht auch alles!
Allerdings sind die Abfragen, der Datenbank so was von langsam, das ich es so nicht einsetzen kann! Weiß jemand warum, habe ich vielleicht etwas nicht beachtet?
Ich setze das auch noch nicht produktiv sondern nur local auf einem Testsystem ein. Und die Verwaltung ist bei ein paar Session-Werten in DB trotzdem so etwas von langsam!
Hier mal einige auzüge aus meiner Klasse!
Zu erst mach im Konstrukt:
jetzt die Funktionen:
Nach meinem Gefühl ist das REPLACE INTO das problem, was so lahmt!
Danke!
ich wollte eigentlich die Sessions in der Datenbank verwalten um das lästige weiterreichen der Session-Id in Cookies oder Url zu verhindern.
Ich hab mich in die Thematik eingelesen, und die Session-verwaltung so umgesetzt! Geht auch alles!
Allerdings sind die Abfragen, der Datenbank so was von langsam, das ich es so nicht einsetzen kann! Weiß jemand warum, habe ich vielleicht etwas nicht beachtet?
Ich setze das auch noch nicht produktiv sondern nur local auf einem Testsystem ein. Und die Verwaltung ist bei ein paar Session-Werten in DB trotzdem so etwas von langsam!
Hier mal einige auzüge aus meiner Klasse!
Zu erst mach im Konstrukt:
PHP-Code:
session_set_save_handler(array(&$this,'session_open'),
array(&$this,'session_close'),
array(&$this,'session_read'),
array(&$this,'session_write'),
array(&$this,'session_destroy'),
array(&$this,'session_clean')
);
register_shutdown_function('session_write_close');
if (!session_id()) {
@session_start();
}
PHP-Code:
/**
* Open the session
*/
public function session_open($strSavePath,$strSessionName) {
if ($this->mysql_connect()) {
return true;
}
return false;
}
/**
* Close the session
*/
public function session_close() {
return true;
}
/**
* Read the session
*/
public function session_read($strSessionId) {
$strSessionId = mysql_real_escape_string($strSessionId);
$strSQLCmd = "SELECT data FROM sessions WHERE sessionId='".$strSessionId."' LIMIT 1";
if ($arrSession = $this->mysql_select($strSQLCmd)) {
return $arrSession[0]['data'];
}
return '';
}
/**
* Write the session
*/
public function session_write($strSessionId,$strData) {
$intLifeTime = ini_get('session.gc_maxlifetime')+time();
$strSQLCmd = "REPLACE INTO sessions VALUES('".$strSessionId."',".$intLifeTime.",'".$strData."')";
//$strSQLCmd = "UPDATE sessions SET expires=".$intLifeTime.",data='".$strData."' WHERE sessionId='".$strSessionId."'";
if ($this->mysql_query($strSQLCmd)) {
return true;
}
return false;
}
/**
* Destoroy the session
*/
public function session_destroy($strSessionId) {
$strSQLCmd = "DELETE FROM sessions WHERE sessionId='".$strSessionId."'";
if ($this->mysql_query($strSQLCmd)) {
return true;
}
return false;
}
/**
* 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 function session_clean($intMax) {
$strSQLCmd = "DELETE FROM sessions WHERE expires<".(time()-$intMax);
if ($this->mysql_query($strSQLCmd)) {
return true;
}
return false;
}
Danke!
Kommentar