〓Présentation〓
Toute personne ayant un peu de bon sens sait qu'il est évidemment exagéré d'utiliser ASP pour réaliser cette fonction, car il ne s'agit pas de messagerie instantanée comme les salons de discussion QQ, MSN ou IRC. Ils comptent tous sur l'actualisation de la page Web pour modifier l'heure de la dernière activité. pour savoir si l'utilisateur est en ligne. Ne vous attendez donc pas à ce que le didacticiel suivant soit parfait. Je viens d'enregistrer mon mode de réflexion. S'il y a quelque chose qui ne va pas, veuillez demander conseil aux experts.
-------------------------------------------------- ----------------------------------
〓Texte〓
Tout d'abord, permettez-moi de vous présenter mon idée pour obtenir cet effet. Si vous pouvez comprendre après avoir lu mon idée, il n'est pas nécessaire de lire cet article...
Je ne peux penser qu'à deux façons d'implémenter cette fonction :
1. base de données + asp
Cela peut être plus compliqué à réaliser, mais cela convient aux systèmes avec un grand nombre d'utilisateurs connectés.
2. application
Utilisez l'objet application : si vous créez une grande communauté, vous devrez peut-être générer une application pour chaque identifiant de connexion. Bien que la conception du programme soit plus simple, il y a trop d'utilisateurs connectés et cela consomme jamais de ressources du serveur. préconisez-le ici. Parce qu'il est facile de générer l'objet d'application lorsque l'utilisateur se connecte, mais il doit être complètement libéré lorsque l'utilisateur quitte le système. Jusqu'à présent, je n'ai pas vu de meilleure méthode ~.
Voyons donc comment utiliser base de données + asp pour résoudre le problème selon lequel le même compte ne peut pas se connecter en même temps !
Demandez d’abord à l’utilisateur de créer une base de données. Ici, nous utilisons l’accès pour créer un nouveau onlyNet118.mdb.
Tableau de données 1 : les utilisateurs stockent les informations d'enregistrement des utilisateurs
Les tables de données suivantes sont configurées : uID (numéro automatique) userName (type de caractère) userPass (type de caractère)
Tableau de données 2 : onlyLogin stocke les informations de connexion temporaires de l'utilisateur
Les tables de données suivantes sont configurées : OLname (type de caractère) OLtime (type de date) OLip (type de caractère)
Une fois la base de données créée, nous ajoutons directement les données à la table des utilisateurs manuellement, ajoutons Net118 à la table userName et ajoutons 111 à la table userPass Afin de mettre en évidence l'objet de notre discussion dans cet article et de supprimer les absurdités inutiles, le mot de passe. ne doit pas être crypté et le nom d'utilisateur doit être le sien. Add~haha~.
D'accord, il y a maintenant une base de données utilisateur dans la base de données. Créons l'interface de connexion utilisateur. Copiez le code suivant et enregistrez-le dans le fichier onlyLogin.asp.
<html>
<tête>
<méta http-equiv=Content-Type content=text/html; charset=gb2312>
<title>Net118.COM interdit la connexion simultanée du même compte depuis différentes régions</title>
</tête>
<corps>
<nom du formulaire=form1 méthode=post action=loginPost.asp>
Nom d'utilisateur : <input name=userName type=text id=userName size=15 maxlength=5>
Mot de passe : <input name=userPass type=password id=userPass size=15 maxlength=15>
<type d'entrée=nom de soumission=valeur de soumission=Connexion>
</form>
</corps>
</html>
Une fois terminé, créez un nouveau fichier loginCONN.asp, copiez le code ci-dessous et enregistrez-le ! Il est connecté à la base de données. Je ne vais pas expliquer cela...
<%
Faible CONN_Net118
Dim Conn_T
Faible mmjj
mmjj=onlyNet118.mdb
Définir CONN_Net118 = Server.CreateObject (ADODB.Connection)
Conn_T=Provider=Microsoft.Jet.OLEDB.4.0;Source de données= & Server.MapPath(&mmjj&)
en cas d'erreur, reprendre ensuite
CONN_Net118.Ouvrir Conn_T
%>
Ensuite, nous créons un fichier loginPost.asp qui existe également dans ce répertoire. Ceci est plus critique. Examinez attentivement le code suivant :
<!--#include file=loginCONN.asp -->
<%
'Supprimer les utilisateurs actifs dans le délai maxTime, maxTime a été défini dans le fichier loginCONN.asp
Conn_Net118.Execute (Supprimer de onlyLogin où DATEDIFF ('s', OLtime, now ()) > & maxTime & )
'================================================== = ===============
Dim rs, ts, txt, sql, nom d'utilisateur, userPass
si Request.Form (Submit) = Connexion alors
userName=Request.Form(userName)'Obtenir le nom de connexion de l'utilisateur du formulaire
userPass=Request.Form(userPass)' Obtenir le mot de passe de connexion de l'utilisateur du formulaire
« Comme nous ne discutons pas ici des problèmes de sécurité, les mots de passe des utilisateurs ne sont pas cryptés.
Définir rs = Server.CreateObject(ADODB.RECORDSET)
sql=SELECT * FROM utilisateurs où userName = ' & userName & ' et userPass = ' & userPass & '
rs.Open SQL, CONN_Net118,1,1
SI ce n'est pas rs.eof alors
Call isOK(userName) 'Appelez ce processus si le nom d'utilisateur et le mot de passe sont corrects, isOK sera personnalisé dans le programme suivant.
autre
Response.Write(<a href=javascript:history.go(-1)>Nom d'utilisateur ou mot de passe erroné</a>)
Réponse.Fin()
finir si
rs.Fermer
Définir rs=Rien
finir si
Le sous est OK (nom d'utilisateur)
Dim Olip 'L'adresse IP enregistrée par le nom d'utilisateur de connexion actuel dans la base de données
Dim Oltime ' La dernière actualisation de la page Web lorsque le nom d'utilisateur de connexion actuel est enregistré dans la base de données constitue une donnée importante pour calculer si l'utilisateur est en ligne.
Dim OLip1 'Enregistre l'adresse IP de connexion de l'utilisateur actuel, utilisée pour distinguer s'il s'agit du même utilisateur.
OLip1=Request.ServerVariables(REMOTE_ADDR)'Obtenir l'adresse IP de l'utilisateur qui a soumis les informations de connexion
Définir ts=Conn_Net118.execute(Sélectionner * FROM onlyLogin WHERE OLname='& userName & ')
sinon ts.eof alors ' Interrogez la base de données pour voir s'il existe des informations de connexion pour cet utilisateur
OLtime=ts(OLtime)
OLip=ts(OLip)
si OLip1<>OLip et DateDiff(s,OLtime,now()) < maxTime alors
'La phrase précédente détermine si l'adresse IP de l'utilisateur de connexion soumise n'est pas la dernière adresse IP de l'utilisateur enregistrée dans la base de données et
« Si la différence entre la dernière durée d'activité de l'utilisateur et l'heure actuelle ne dépasse pas le nombre de secondes spécifié, il est confirmé que l'utilisateur est actuellement en ligne.
Response.Write <a href=javascript:history.go(-1)>Cet utilisateur est actuellement en ligne Vous ne pouvez pas vous connecter à ce compte depuis d'autres endroits ! </a>
Réponse.Fin()
autre
« Sinon, il sera déterminé que la connexion a réussi et la valeur sera versée à la session.
Session (lgName) = nom d'utilisateur
Session (lgPass) = utilisateurPass
Réponse.Redirection loginOK.asp
Réponse.Fin
finir si
autre
'Si la base de données ne dispose pas d'enregistrement d'utilisateur de connexion, exécutez l'instruction suivante
Dim ls
Définir ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * Depuis onlyLogin, CONN_Net118,2,2
ls.ADDNEW
ls(OLname)=nom d'utilisateur
ls(OLip)=OLip1
ls(OLtime)=MAINTENANT()
ls.UPDATE
ls.Fermer
Définir ls=Rien
'Déterminez la connexion réussie et payez la valeur de la session
Session (lgName) = nom d'utilisateur
Session (lgPass) = utilisateurPass
Réponse.Redirection loginOK.asp
Réponse.Fin
finir si
Fin du sous-%>
Si vous comprenez les fichiers asp, vous saurez d'un coup d'œil qu'après une connexion réussie, la feuille passera à loginOK.asp. Jetons immédiatement un coup d'œil au code de cette feuille.
<type de style=texte/css>
<!--
corps {couleur de fond : #FF9900 ;}
-->
</style>
<% SI Session (lgName) <> puis %>
Vous vous êtes connecté avec succès ! ! ! Ce qui suit est une iframe qui est introduite dans la page Web afin d'actualiser la page Web à l'heure spécifiée et de signaler au serveur si vous êtes en ligne.
Afin de faciliter la distinction, nous utilisons le blanc comme couleur de fond pour la page Web du cadre.
<iframe border=0 name=new_date marginwidth=0 framespacing=0 marginheight=0 src=loginFrame.asp
frameborder=0 noResize width=100 scrolling=no height=30 vspale=0></iframe>
<% autre %>
Vous n'êtes pas connecté. Bienvenue sur le réseau d'information des webmasters : http://www.Net118.com
<% fin si %>
Si vous êtes une personne prudente, vous saurez immédiatement que nous devons ensuite faire loginFrame.asp
<!--#include file=loginCONN.ASP -->
<% CONN_Net118.Execute(Mise à jour uniquementLogin Set OLtime='& NOW() & 'where OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%>;
D'accord, pour l'instant notre programme est terminé. La clé de ce programme est de déterminer si l'utilisateur est en ligne, et je n'ai d'autre choix que d'utiliser FRAME pour imbriquer la feuille de clé qui s'actualise régulièrement pour déterminer si l'utilisateur est en ligne dans la feuille. du programme principal. Ici, en fonctionnement réel, vous pouvez modifier la largeur et la hauteur de l'iframe à 0 afin que les utilisateurs ordinaires ne puissent pas la voir, ou rendre la couleur d'arrière-plan de la page Web du programme principal la même que celle du programme principal. page Web imbriquée régulièrement actualisée, et tout ira bien.
Il n'y a pas si longtemps, j'ai vu quelqu'un dans le forum de discussion dire que cela pouvait être déterminé à l'aide d'éléments tels que des sessions et des cookies. C'est évidemment impossible, car les objets qu'ils génèrent ne fonctionnent que sur eux-mêmes et leur contenu de données ne peut pas être partagé avec d'autres utilisateurs. tout partagé. Appliaction devrait être un autre moyen d'atteindre cet objectif, mais j'ai abandonné cette idée lorsque j'ai pensé que si plusieurs utilisateurs se connectaient en même temps, au moins un à trois objets appliaction seraient générés pour chaque utilisateur, car alors notre original un serveur médiocre sera certainement entraîné vers le bas ~