〓Einführung〓
Jeder mit etwas gesundem Menschenverstand weiß, dass es offensichtlich weit hergeholt ist, ASP für diese Funktion zu verwenden, da es sich nicht um Instant Messaging wie QQ-, MSN- oder IRC-Chatrooms handelt. Sie sind alle auf die Aktualisierung der Webseite angewiesen, um den Zeitpunkt der letzten Aktivität zu ändern Erwarten Sie also nicht, dass das folgende Tutorial perfekt ist. Wenn etwas nicht stimmt, fragen Sie bitte die Experten.
-------------------------------------------------- ----------------------------------
〓Text〓
Lassen Sie mich Ihnen zunächst meine Idee zur Erzielung dieses Effekts vorstellen. Wenn Sie meine Idee verstehen, ist es nicht nötig, diesen Artikel zu lesen ...
Mir fallen nur zwei Möglichkeiten ein, diese Funktion zu implementieren:
1. Datenbank + ASP
Dies ist möglicherweise komplizierter, eignet sich jedoch für Systeme mit einer großen Anzahl angemeldeter Benutzer.
2. Anwendung
Verwenden Sie das Anwendungsobjekt: Wenn Sie eine große Community aufbauen, müssen Sie möglicherweise für jede Anmelde-ID eine Anwendung generieren. Obwohl das Programmdesign einfacher ist, gibt es zu viele angemeldete Benutzer und es verbraucht niemals Serverressourcen Befürworten Sie es hier, da es einfach ist, das Anwendungsobjekt zu generieren, wenn sich der Benutzer anmeldet, es jedoch vollständig freigegeben werden muss, wenn der Benutzer das System verlässt. Bisher habe ich keine bessere Methode gesehen
Schauen wir uns also an, wie Sie mit Datenbank + ASP das Problem lösen können, dass sich dasselbe Konto nicht gleichzeitig anmelden kann!
Bitten Sie den Benutzer zunächst, eine Datenbank zu erstellen. Hier verwenden wir den Zugriff, um eine neue onlyNet118.mdb zu erstellen.
Datentabelle 1: Benutzer speichert Benutzerregistrierungsinformationen
Folgende Datentabellen werden eingerichtet: uID (automatische Nummer) userName (Zeichentyp) userPass (Zeichentyp)
Datentabelle 2: onlyLogin speichert temporäre Anmeldeinformationen des Benutzers
Folgende Datentabellen werden eingerichtet: OLname (Zeichentyp) OLtime (Datumstyp) OLip (Zeichentyp)
Nachdem die Datenbank erstellt wurde, fügen wir Daten direkt manuell zur Benutzertabelle hinzu, fügen Net118 zur Tabelle userName und 111 zur Tabelle userPass hinzu. Um den Schwerpunkt unserer Diskussion in diesem Artikel hervorzuheben und unnötigen Unsinn zu entfernen, das Kennwort sollte nicht verschlüsselt sein und der Benutzername sollte sein eigener sein
Okay, jetzt gibt es eine Benutzerdatenbank in der Datenbank. Kopieren Sie den folgenden Code und speichern Sie ihn in der Datei onlyLogin.asp.
<html>
<Kopf>
<meta http-equiv=Content-Type content=text/html;
<title>Net118.COM verbietet die gleichzeitige Anmeldung desselben Kontos aus verschiedenen Regionen</title>
</head>
<Körper>
<form name=form1 method=post action=loginPost.asp>
Benutzername: <input name=userName type=text id=userName size=15 maxlength=5>
Passwort: <Eingabename=userPass type=password id=userPass size=15 maxlength=15>
<Eingabetyp=Submit-Name=Submit-Wert=Login>
</form>
</body>
</html>
Erstellen Sie nach Abschluss eine neue loginCONN.asp-Datei, kopieren Sie den folgenden Code und speichern Sie ihn! Es hängt mit der Datenbank zusammen. Ich werde nicht so viel erklären ...
<%
Dimmen Sie CONN_Net118
Dim Conn_T
Dim mmtt
mmdd=onlyNet118.mdb
Setzen Sie CONN_Net118 = Server.CreateObject(ADODB.Connection)
Conn_T=Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & Server.MapPath(&mmdd&)
Bei Fehler als nächstes fortfahren
CONN_Net118.Conn_T öffnen
%>
Als nächstes erstellen wir eine loginPost.asp-Datei, die ebenfalls in diesem Verzeichnis vorhanden ist. Sehen Sie sich den folgenden Code genauer an:
<!--#include file=loginCONN.asp -->
<%
„Aktive Benutzer innerhalb der maxTime-Zeit löschen, maxTime wurde in der Datei loginCONN.asp definiert.“
Conn_Net118.Execute(Delete From onlyLogin where DATEDIFF('s',OLtime, now()) > & maxTime & )
'============================================== = ===============
Dimmen Sie rs, ts, txt, sql, userName, userPass
wenn Request.Form(Submit)=Login dann
userName=Request.Form(userName)'Anmeldenamen des Formularbenutzers abrufen
userPass=Request.Form(userPass)' Formularbenutzer-Anmeldekennwort abrufen
„Da es hier nicht um Sicherheitsfragen geht, werden Benutzerpasswörter nicht verschlüsselt.“
Setze rs = Server.CreateObject(ADODB.RECORDSET)
sql=SELECT * VON Benutzern, wobei userName = ' & userName & ' und userPass = ' & userPass & '
rs.SQL öffnen, CONN_Net118,1,1
WENN nicht rs.eof dann
Call isOK(userName) ' Rufen Sie diesen Prozess auf, wenn der Benutzername und das Passwort korrekt sind. isOK wird im folgenden Programm angepasst.
anders
Response.Write(<a href=javascript:history.go(-1)>Falscher Benutzername oder Passwort</a>)
Response.End()
Ende wenn
rs.Schließen
Setze rs=Nothing
Ende wenn
Sub isOK(Benutzername)
Dim Olip 'Die vom aktuellen Login-Benutzernamen in der Datenbank gespeicherte IP
Dim Oltime ' Der Zeitpunkt der letzten Aktualisierung der Webseite, wenn der aktuelle Login-Benutzername in der Datenbank gespeichert wird, ist ein wichtiges Datum für die Berechnung, ob der Benutzer online ist.
Dim OLip1 'Zeichnet die Anmelde-IP des aktuellen Benutzers auf, um zu unterscheiden, ob es sich um denselben Benutzer handelt.
OLip1=Request.ServerVariables(REMOTE_ADDR)'Rufen Sie die IP des Benutzers ab, der Anmeldeinformationen übermittelt hat
Setze ts=Conn_Net118.execute(Select * FROM onlyLogin WHERE OLname='& userName & ')
Wenn nicht ts.eof, dann ' Fragen Sie die Datenbank ab, um festzustellen, ob Anmeldeinformationen für diesen Benutzer vorhanden sind
OLtime=ts(OLtime)
OLip=ts(OLip)
wenn OLip1<>OLip und DateDiff(s,OLtime,now()) < maxTime dann
„Der vorherige Satz bestimmt, ob die übermittelte Login-Benutzer-IP nicht die zuletzt in der Datenbank aufgezeichnete Benutzer-IP ist und
„Wenn die Differenz zwischen der letzten Aktivitätszeit des Benutzers und der aktuellen Zeit die angegebene Anzahl von Sekunden nicht überschreitet, wird bestätigt, dass der Benutzer derzeit online ist.“
Response.Write <a href=javascript:history.go(-1)>Dieser Benutzer ist derzeit online. Sie können sich nicht von anderen Orten aus bei diesem Konto anmelden! </a>
Response.End()
anders
„Andernfalls wird festgestellt, dass die Anmeldung erfolgreich war, und der Wert wird an die Sitzung ausgezahlt.“
Sitzung(lgName)=Benutzername
Session(lgPass)=userPass
Response.Redirect loginOK.asp
Antwort.Ende
Ende wenn
anders
'Wenn die Datenbank keinen Login-Benutzerdatensatz hat, führen Sie die folgende Anweisung aus
Dim ls
Setze ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * Von onlyLogin,CONN_Net118,2,2
ls.ADDNEW
ls(OLname)=Benutzername
ls(OLip)=OLip1
ls(OLtime)=NOW()
ls.UPDATE
ls.Schließen
Setze ls=Nothing
„Ermitteln Sie die erfolgreiche Anmeldung und zahlen Sie den Wert für die Sitzung.“
Sitzung(lgName)=Benutzername
Session(lgPass)=userPass
Response.Redirect loginOK.asp
Antwort.Ende
Ende wenn
Sub %> beenden
Wenn Sie ASP-Dateien verstehen, wissen Sie auf einen Blick, dass das Blatt nach erfolgreicher Anmeldung zu loginOK.asp springt. Schauen wir uns sofort den Code dieses Blattes an.
<style type=text/css>
<!--
Körper {Hintergrundfarbe: #FF9900;}
->
</style>
<% IF Session(lgName)<> dann %>
Sie haben sich erfolgreich angemeldet! ! ! Das Folgende ist ein Iframe, der in die Webseite eingeschleust wird, um die Webseite zum angegebenen Zeitpunkt zu aktualisieren und dem Server zu melden, ob Sie online sind.
Um die Unterscheidung zu erleichtern, verwenden wir Weiß als Hintergrundfarbe für die Rahmenwebseite.
<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>
<% sonst %>
Sie sind nicht angemeldet. Willkommen im Webmaster-Informationsnetzwerk: http://www.Net118.com
<% end if %>
Wenn Sie vorsichtig sind, werden Sie sofort wissen, dass wir als Nächstes loginFrame.asp tun müssen
<!--#include file=loginCONN.ASP -->
<% CONN_Net118.Execute(Update onlyLogin Set OLtime='& NOW() & ' where OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%>;
Okay, bis jetzt ist unser Programm abgeschlossen. Der Schlüssel zu diesem Programm besteht darin, festzustellen, ob der Benutzer online ist, und ich habe keine andere Wahl, als FRAME zu verwenden, um das Schlüsselblatt zu verschachteln, das regelmäßig aktualisiert wird, um festzustellen, ob der Benutzer online ist Hier können Sie im tatsächlichen Betrieb die Breite und Höhe des Iframes auf 0 ändern, sodass normale Benutzer ihn nicht sehen können, oder die Hintergrundfarbe der Webseite des Hauptprogramms mit der des verbinden Die verschachtelte Webseite wird regelmäßig aktualisiert, und alles wird in Ordnung sein.
Vor nicht allzu langer Zeit habe ich im Diskussionsforum jemanden sagen sehen, dass dies mithilfe von Dingen wie Sitzungen und Cookies bestimmt werden kann. Dies ist offensichtlich unmöglich, da die von ihnen generierten Objekte nur für sich selbst funktionieren und ihr Dateninhalt nicht mit anderen Benutzern geteilt werden kann alle geteilt. Appliaction sollte ein weiterer Weg sein, diesen Zweck zu erreichen, aber ich habe diese Idee aufgegeben, als ich dachte, dass, wenn sich viele Benutzer gleichzeitig anmelden, für jeden Benutzer mindestens ein bis drei Appliaction-Objekte generiert werden, denn dann ist unser Original Schlechter Server Wird definitiv heruntergezogen ~