Lors de la création d'un site Web pour la communication en ligne, il y a un problème qui me donne mal à la tête, à savoir les statistiques en temps réel des utilisateurs en ligne. Le client a besoin de : compter le nombre actuel de personnes en ligne, le nombre de visiteurs, le nombre de membres. , et la liste des utilisateurs en ligne, y compris les visiteurs, les membres et le membre de direction (s'il s'agit d'un visiteur, l'identifiant du visiteur est automatiquement généré, s'il s'agit d'un membre, le nom du membre est affiché). Parce que cela nécessite des performances en temps réel, je vais d'abord transmettre l'idée d'utiliser global.asa pour le résoudre.
La clé du problème est de savoir comment déterminer que l'utilisateur est parti et comment exécuter un fichier ou une fonction lorsque l'utilisateur quitte.
Après en avoir discuté avec des amis sur Internet, j'ai finalement résolu ce problème.
Le principe de la solution est : écrire une page universelle. La page dite universelle signifie que chaque page de l'application contient cette page, par exemple : header.asp Dans cette page, écrivez un morceau de code en utilisant XMLHTTP. Le code est Une requête est envoyée au serveur toutes les 10 secondes ou 20 secondes, dans le but de mettre à jour le temps de connexion de l'utilisateur actuel et de supprimer les utilisateurs dont le temps de connexion dépasse un certain temps, afin que les enregistrements des utilisateurs en ligne dans la base de données conservent un certain temps réel. -nature temporelle.
La principale méthode d'implémentation est la suivante :
créer une nouvelle base de données, les noms des champs sont : id (caractère), nom (caractère), utilisateur (numéro) tt (date), admin (code d'autorité, 0-utilisateur normal, 1-administrateur)
table Nom:online
header.asp ↓
=========================================== === ================
<%
... ...
if session("s_in")<>1 et session("s_name")="" alors 'Si l'utilisateur se connecte une fois à
rs.open "select * from online", conn, 3,3
rs.addnew
rs("id")=session.sessionID
rs("name")="Invité" & session.sessionID
rs("user")=0 '0 signifie que l'utilisateur n'est pas connecté et est un visiteur.
rs("tt")=maintenant
rs.mise à jour
rs.fermer
session("s_in")=1 'Définit que les informations de l'utilisateur ont été stockées dans la base de données, indiquant qu'il est en ligne
end if
if session("s_name")<>"" then 'Si l'utilisateur s'est connecté via la boîte de connexion
rs.open "select * from onlinewhere id='" & session.sessionID & "'",conn,3,3
rs("nom")=session("s_name")
rs("admin")=session("s_admin") 'Mettre à jour le nom de l'utilisateur avec le nom du membre
rs("user")=1 'Indique que l'utilisateur s'est connecté et est membre
rs("tt")=now 'Définit l'heure actuelle du système sur l'heure de connexion de l'utilisateur
rs.mise à jour
rs.fermer
fin si
... ...
%>
... ...
<head>
... ...
<script language=javascript>
fonctionTest()
{
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","onceonline.asp",false); //Envoyer la demande de mise à jour à onceonline.asp
xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval("Test();",10); //Envoyer une demande de mise à jour toutes les 10 secondes
</script>
... ...
</head>
... ...
============================== ============================
onceonline.asp
<%
rs.open "sélectionnez tt depuis en ligne où id='" & session.sessionID & "'",conn,3,3
rs("tt")=now() 'Mettre à jour l'heure de connexion de l'utilisateur en ligne actuel
rs.mise à jour
rs.close
rs.open "supprimer de la ligne où datediff('s',tt,now())>60",conn,3,1 'Supprimer l'utilisateur avec délai d'attente
%>
================================================= ==============
De cette manière, la nature en temps réel de la liste des utilisateurs dans la base de données est fondamentalement garantie. L'erreur dépend de la différence entre l'heure de mise à jour et l'heure de suppression et l'heure de suppression. vitesse de traitement du serveur. Il est recommandé de ne pas expirer la suppression. Si l'intervalle de temps entre les utilisateurs est trop court, cela peut entraîner des erreurs parmi les utilisateurs en ligne.
Cette solution a été déboguée sur WIN2000+SQL Server2000. Étant donné que cette solution nécessite une configuration système relativement importante, j'espère que d'autres amis trouveront de meilleures solutions et résoudront ce problème ensemble !
Ma boîte aux lettres : [email protected]
Je m'appelle « Building Blocks », vous êtes invités à devenir amis avec moi !