En réfléchissant à la question de la session, j'ai finalement abandonné la session :
1. La session d'origine est gérée à l'aide de fichiers. La qualité du système de fichiers affecte directement les performances de la session, notamment lorsqu'il y a plusieurs K personnes en ligne en même temps. Il existe deux solutions : base de données et fichier (en utilisant le chemin de hachage).
2. La session d'origine a une évolutivité et une contrôlabilité médiocres. Pas propice à l'intégration avec mon système existant.
3. Lors du choix d'une base de données, je n'ai pas choisi SQLite. La dernière fois que j'ai testé l'efficacité de SQLite sur Win XP, ce n'était pas aussi bon que prévu.
Enfin, j'ai choisi la table tas de myql pour traiter les sessions et j'ai combiné le traitement des sessions avec les statistiques des utilisateurs en ligne.
Le code donné ci-dessous est un exemple du mien (aucun autre détail n'est fourni, l'utilisation spécifique doit être modifiée en conséquence)
<?
/**
* Gérer les utilisateurs en ligne et simuler des sessions
* CREATE TABLE `webqq_session` (
`sid` char( 32 ) NON NULL ,
`uid` mediumint( 8 ) NON NULL ,
`username` char( 80 ) NON NULL ,
`ismember` tinyint( 1 ) NON NULL ,
`logintime` int( 10 ) NON NULL ,
`activetime` int( 10 ) NON NULL ,
CLÉ PRIMAIRE (`sid`)
) MOTEUR = Jeu de caractères par défaut du tas = gb2312
* @auteur:feifengxlq< http://www.phpobject.net > feifengxlq#gmail.com
* @depuis : 2006-10-23
* @copyright : http://www.phpobject.net
* Remarque : L'utilisation de ce fichier doit être combinée avec d'autres fichiers : tels que le filtrage des cookies, certaines fonctions de base et classes d'opérations de base de données.
*/
séance de cours
{
var $mysql;
var $cookie_id='webqq_sid';
var $session=array();
var $max_time=1200;//La durée maximale par défaut est de 20 minutes
fonction__construct()
{
$this->mysql=new module(TB_PREX.'_session');//Nécessite un support externe
$this->start();
}
fonction start()
{
si(vide($_COOKIE[$this->cookie_id]))
{
//Initialiser la session
$this->create();
}autre{
//Le cookie existe déjà, vérifiez s'il existe dans la base de données
$sid=$_COOKIE[$this->cookie_id];
if($this->mysql->detail('where sid=''.$sid.'''))
{
//Existe dans la base de données
$row['activetime']=time();
$this->mysql->update($row,'where sid=''.$sid.''');
$this->session=$this->mysql->detail('where sid=''.$sid.''');
}autre{
//N'existe pas dans la base de données
$this->create();
}
}
//Supprimer les utilisateurs qui ne sont pas en ligne dans la base de données
$this->mysql->delete('where activetime+'.$this->max_time.'<'.time());
}
registre de fonction ($ nom, $ valeur, $ mise à jour = faux)
{
if(array_key_exists($name,$this->session)){
$this->session[$name]=$value ;
}
if($update)$this->update();
}
registre de fonctions ($name = '')
{
if(empty($name)) renvoie $this->session ;
if(array_key_exists($name,$this->session)){
return $this->session[$name];
}
}
//Mise à jour les informations de session dans la base de données
fonction mise à jour()
{
$row['uid']=$this->session['uid'];
$row['nom d'utilisateur']=$this->session['nom d'utilisateur'];
$row['ismember']=$this->session['ismember'];
$row['logintime']=$this->session['logintime'];
$row['activetime']=$this->session['activetime'];
$this->mysql->update($row,'where sid=''.$this->session['sid'].''');
}
/*------------------Les méthodes suivantes sont privées------------------------- --------------------------------**/
fonctioncreate()
{
$maintenant=heure();
$sid=md5('0'.$nowtime.getip());//La fonction getip() doit être prédéfinie : obtenir l'adresse IP du client
setcookie($this->cookie_id,$sid,$nowtime+3600*24);//par défaut 24 heures
$row['sid']=$sid;
$row['uid']=0;
$row['nom d'utilisateur']='invité';
$row['ismember']=0;
$row['logintime']=$nowtime;
$row['activetime']=$nowtime;
$this->mysql->add($row);//Écrire dans la base de données
$this->session=$row;
}
}
?>