Als ich über das Thema Sitzung nachdachte, habe ich es schließlich aufgegeben:
1. Die ursprüngliche Sitzung wird mithilfe von Dateien verwaltet. Die Qualität des Dateisystems wirkt sich direkt auf die Leistung der Sitzung aus, insbesondere wenn mehrere K Personen gleichzeitig online sind. Es gibt zwei Lösungen: Datenbank und Datei (unter Verwendung des Hash-Pfads).
2. Die ursprüngliche Sitzung weist eine schlechte Skalierbarkeit und Steuerbarkeit auf. Nicht förderlich für die Integration in mein bestehendes System.
3. Bei der Auswahl einer Datenbank habe ich mich nicht für SQLite entschieden. Als ich die Effizienz von SQLite unter Win XP das letzte Mal getestet habe, war sie nicht so gut wie erwartet.
Schließlich habe ich mich für die Heap-Tabelle von MySQL zum Verarbeiten von Sitzungen entschieden und die Sitzungsverarbeitung mit Online-Benutzerstatistiken kombiniert.
Der unten angegebene Code ist ein Beispiel von mir (es werden keine weiteren Details angegeben, die spezifische Verwendung muss entsprechend geändert werden)
<?
/**
* Behandeln Sie Online-Benutzer und simulieren Sie Sitzungen
* TABELLE „webqq_session“ ERSTELLEN (
„sid“ char( 32 ) NOT NULL ,
`uid` mediumint( 8 ) NOT NULL ,
`Benutzername` char( 80 ) NOT NULL ,
`ismember` tinyint( 1 ) NOT NULL ,
`logintime` int( 10 ) NOT NULL ,
`activetime` int( 10 ) NOT NULL ,
PRIMÄRSCHLÜSSEL („sid“)
) ENGINE = HEAP DEFAULT CHARSET = gb2312
* @author:feifengxlq< http://www.phpobject.net > feifengxlq#gmail.com
* @seit:23.10.2006
* @copyright:http://www.phpobject.net
* Hinweis: Die Verwendung dieser Datei muss mit anderen Dateien kombiniert werden: z. B. Cookie-Filterung, einigen Grundfunktionen und Datenbankbetriebsklassen
*/
Unterrichtsstunde
{
var $mysql;
var $cookie_id='webqq_sid';
var $session=array();
var $max_time=1200;//Die standardmäßige maximale Zeit beträgt 20 Minuten
function__construct()
{
$this->mysql=new module(TB_PREX.'_session');//Erfordert externe Unterstützung
$this->start();
}
Funktion start()
{
if(empty($_COOKIE[$this->cookie_id]))
{
//Sitzung initialisieren
$this->create();
}anders{
//Cookie existiert bereits, prüfen Sie, ob es in der Datenbank vorhanden ist
$sid=$_COOKIE[$this->cookie_id];
if($this->mysql->detail('where sid=''.$sid.'''))
{
//In der Datenbank vorhanden
$row['activetime']=time();
$this->mysql->update($row,'where sid=''.$sid.''');
$this->session=$this->mysql->detail('where sid=''.$sid.''');
}anders{
//Existiert nicht in der Datenbank
$this->create();
}
}
//Benutzer löschen, die nicht online in der Datenbank sind
$this->mysql->delete('where activetime+'.$this->max_time.'<'.time());
}
Funktionsregister($name,$value,$update=false)
{
if(array_key_exists($name,$this->session)){
$this->session[$name]=$value;
}
if($update)$this->update();
}
Funktionsregistrierung($name='')
{
if(empty($name)) return $this->session;
if(array_key_exists($name,$this->session)){
return $this->session[$name];
}
}
//Sitzungsinformationen in der Datenbank aktualisieren
Funktion update()
{
$row['uid']=$this->session['uid'];
$row['username']=$this->session['username'];
$row['ismember']=$this->session['ismember'];
$row['logintime']=$this->session['logintime'];
$row['activetime']=$this->session['activetime'];
$this->mysql->update($row,'where sid=''.$this->session['sid'].''');
}
/*------------------Die folgenden sind private Methoden---------- --------------------------------**/
Funktioncreate()
{
$nowtime=time();
$sid=md5('0'.$nowtime.getip());//Die Funktion getip() muss vordefiniert werden: IP-Adresse des Kunden abrufen
setcookie($this->cookie_id,$sid,$nowtime+3600*24);//default 24 Stunden
$row['sid']=$sid;
$row['uid']=0;
$row['username']='guest';
$row['ismember']=0;
$row['logintime']=$nowtime;
$row['activetime']=$nowtime;
$this->mysql->add($row);//In die Datenbank schreiben
$this->session=$row;
}
}
?>