Bonjour,
Pour expliciter un peu le titre de ce poste voici mon problème à l'origine: je voulais (comme pas mal de monde) déterminer le temps de connexion de chaque utilisateur sur mon site web. Pour cela j'utilise les sessions php. A chaque création de session j'enregistre la date (et l'heure), le nom, l'IP et l'id de session de l'utilisateur, dans une table de ma base de données.
Jusqu'ici tout va bien...
Le problème c'est pour déterminer la date et l'heure de la déconnexion.
J'ai un bouton 'déconnexion' mais comme la plupart des utilisateurs en général ferme le navigateur sans cliquer sur ce bouton, je ne peux pas l'utiliser de manière fiable pour déterminer la date de fin de session.
J'ai donc créée un script php avec une boucle infini (while (1)) qui recherche dans la table de la base tout les enregistrements qui n'ont pas de date de fin et qui compare l'id de session avec les noms des fichiers de session.
Ceci fonctionne bien, mais je ne sais pas trop pour le moment quel est l'impacte en terme de fonctionnement sur serveur web et sur le serveur de base de données.
Est-ce que le fait d'avoir un petit script qui tourne en permanence peut avoir un gros impacte sur le serveur en terme de temps d'accès ou autre?
Je mets ci-dessous le code de ce script afin que vous puissiez me dire s'il y a moyen d'optimiser ce script ou bien s'il y a un autre moyen pour détecter l'heure de fin de session?
Merci.
Voici le script: (pour info config/connexion.php contient la connexion à la base de données... comme on peut s'en douter ;-) )
<?php
include("config/connexion.php");
set_time_limit(0);
while(1)
{
//Recherche des sessions sans date de fin
$sql_s = "SELECT * FROM sessions WHERE fin = ''";
$query_s=mysql_query($sql_s) or die ("Impossible d'exécuter la requête : ".$sql_s);
$num_s=mysql_num_rows($query_s);
$fin = @mktime(date('d-m-Y H-i-s'));
for($i=0;$i<$num_s;$i++){
$id = mysql_result($query_s,$i,'id');
$session_id = mysql_result($query_s,$i,'session_id');
$debut = mysql_result($query_s,$i,'debut');
$duree = $fin - $debut;
$filename = '../../repertoire/session/'.$session_id.'';
if (!file_exists($filename)) {
$sql_updt_s = "UPDATE sessions SET fin = '".$fin."', duree = '".$duree."' WHERE id = ".$id."";
$query_updt_s=mysql_query($sql_updt_s) or die ("Impossible d'exécuter la requête : ".$sql_updt_s);
}
}
sleep(10);
}
?>
Partager