〓Introducción〓
Cualquiera con algo de sentido común sabe que obviamente es descabellado utilizar ASP para realizar esta función, porque no se trata de mensajería instantánea como las salas de chat QQ, MSN o IRC. Todos dependen de actualizar la página web para cambiar la hora de la última actividad. para saber si el usuario está en línea. Así que no espere que el siguiente tutorial sea perfecto. Acabo de registrar mi modo de pensamiento. Si hay algún problema, ¡pida consejo a los expertos!
-------------------------------------------------- ----------------------------------
〓Texto〓
En primer lugar, permítanme presentarles mi idea de lograr este efecto. Si pueden entenderlo después de leer mi idea, no es necesario que lean este artículo.
Sólo se me ocurren dos formas de implementar esta función:
1. base de datos+asp
Puede que sea más complicado de hacer, pero es adecuado para sistemas con una gran cantidad de usuarios conectados.
2. solicitud
Utilice el objeto de aplicación: si está creando una comunidad grande, es posible que deba generar una aplicación para cada ID de inicio de sesión. Aunque el diseño del programa será más simple, hay demasiados usuarios conectados y nunca consumirá recursos del servidor. Lo recomiendo aquí porque es fácil generar el objeto de aplicación cuando el usuario inicia sesión, pero debe liberarse por completo cuando el usuario sale del sistema. Hasta ahora, no he visto un método mejor ~.
Entonces, echemos un vistazo a cómo usar la base de datos + asp para resolver el problema de que la misma cuenta no puede iniciar sesión al mismo tiempo.
Primero pídale al usuario que cree una base de datos. Aquí usamos el acceso para crear un nuevo onlyNet118.mdb.
Tabla de datos 1: los usuarios almacenan información de registro de usuarios
Se configuran las siguientes tablas de datos: uID (número automático) nombre de usuario (tipo de carácter) contraseña de usuario (tipo de carácter)
Tabla de datos 2: onlyLogin almacena información de inicio de sesión temporal del usuario
Se configuran las siguientes tablas de datos: OLname (tipo de carácter) OLtime (tipo de fecha) OLip (tipo de carácter)
Una vez creada la base de datos, agregamos datos directamente a la tabla de usuarios manualmente, agregamos Net118 a la tabla de nombre de usuario y agregamos 111 a la tabla de contraseña de usuario. Para resaltar el foco de nuestra discusión en este artículo y eliminar tonterías innecesarias, la contraseña. no debe estar cifrado y el nombre de usuario debe ser el suyo. Agregar~jaja~.
Bien, ahora hay una base de datos de usuarios en la base de datos. Creemos la interfaz de inicio de sesión del usuario. Copie el siguiente código y guárdelo en el archivo onlyLogin.asp.
<html>
<cabeza>
<meta http-equiv=Tipo de contenido content=text/html charset=gb2312>
<title>Net118.COM prohíbe el inicio de sesión simultáneo de la misma cuenta desde diferentes regiones</title>
</cabeza>
<cuerpo>
<nombre del formulario=método formulario1=acción de publicación=loginPost.asp>
Nombre de usuario: <nombre de entrada=tipo de nombre de usuario=id de texto=tamaño de nombre de usuario=15 longitud máxima=5>
Contraseña: <nombre de entrada=tipo de contraseña de usuario=id de contraseña=tamaño de contraseña de usuario=15 longitud máxima=15>
<tipo de entrada=enviar nombre=Enviar valor=Iniciar sesión>
</formulario>
</cuerpo>
</html>
Una vez completado, cree un nuevo archivo loginCONN.asp, copie el código a continuación y guárdelo. Está conectado a la base de datos. No explicaré mucho sobre esto...
<%
Atenuado CONN_Net118
Conexión tenue_T
mmdd tenue
mmdd=soloNet118.mdb
Establecer CONN_Net118 = Server.CreateObject(ADODB.Connection)
Conn_T=Provider=Microsoft.Jet.OLEDB.4.0;Fuente de datos= & Server.MapPath(&mmdd&)
en caso de error reanudar siguiente
CONN_Net118.Abrir Conn_T
%>
A continuación, creamos un archivo loginPost.asp que también existe en este directorio. Esto es más crítico. Mire detenidamente el siguiente código:
<!--#include file=loginCONN.asp -->
<%
'Eliminar usuarios activos dentro del tiempo maxTime, maxTime se ha definido en el archivo loginCONN.asp
Conn_Net118.Execute(Eliminar de onlyLogin donde DATEDIFF('s',OLtime, now()) > & maxTime & )
'=================================================== = ================
Dim rs, ts, txt, sql, nombre de usuario, contraseña de usuario
si Request.Form(Enviar)=Iniciar sesión entonces
userName=Request.Form(userName)'Obtener nombre de inicio de sesión del usuario del formulario
userPass=Request.Form(userPass)' Obtener la contraseña de inicio de sesión del usuario del formulario
'Dado que aquí no estamos discutiendo cuestiones de seguridad, las contraseñas de los usuarios no están cifradas.
Establecer rs = Server.CreateObject(ADODB.RECORDSET)
sql=SELECT * FROM usuarios donde nombre de usuario = ' & nombre de usuario & ' y contraseña de usuario = ' & contraseña de usuario & '
rs.Abrir sql, CONN_Net118,1,1
SI no es rs.eof entonces
Call isOK(userName) ' Llame a este proceso si el nombre de usuario y la contraseña son correctos, isOK se personalizará en el siguiente programa.
demás
Response.Write(<a href=javascript:history.go(-1)>nombre de usuario o contraseña incorrectos</a>)
Respuesta.Fin()
terminar si
rs.Cerrar
Establecer rs=Nada
terminar si
Sub está bien (nombre de usuario)
Dim Olip 'La IP guardada por el nombre de usuario de inicio de sesión actual en la base de datos
Dim Oltime ' La última vez que se actualizó la página web cuando el nombre de usuario de inicio de sesión actual se guarda en la base de datos es información importante para calcular si el usuario está en línea.
Dim OLip1 'Registra la IP de inicio de sesión del usuario actual, que se utiliza para distinguir si es el mismo usuario.
OLip1=Request.ServerVariables(REMOTE_ADDR)'Obtener la IP del usuario que envió la información de inicio de sesión
Establecer ts=Conn_Net118.execute(Seleccione * DESDE onlyLogin DONDE OLname='& nombre de usuario & ')
si no es ts.eof, entonces 'Consulta la base de datos para ver si hay información de inicio de sesión para este usuario
tiempoOL=ts(tiempoOL)
OLip=ts(OLip)
si OLip1<>OLip y DateDiff(s,OLtime,now()) <maxTime entonces
'La oración anterior determina si la IP del usuario de inicio de sesión enviada no es la última IP del usuario registrada en la base de datos y
'Si la diferencia entre la hora de la última actividad del usuario y la hora actual no excede la cantidad de segundos especificada, se confirma que el usuario está actualmente en línea.
Response.Write <a href=javascript:history.go(-1)>Este usuario está actualmente en línea. ¡No puede iniciar sesión en esta cuenta desde otros lugares! </a>
Respuesta.Fin()
demás
'De lo contrario, se determinará que el inicio de sesión fue exitoso y se pagará el valor de la sesión.
Sesión(lgName)=nombre de usuario
Sesión(lgPass)=userPass
Respuesta.Redireccionar inicio de sesiónOK.asp
Respuesta.Fin
terminar si
demás
'Si la base de datos no tiene un registro de usuario de inicio de sesión, ejecute la siguiente declaración
ls tenues
Establecer ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * Desde onlyLogin,CONN_Net118,2,2
ls.AÑADIR NUEVO
ls(OLname)=nombre de usuario
ls(OLip)=OLip1
ls(tiempoOL)=AHORA()
ls.ACTUALIZAR
ls.Cerrar
Establecer ls=Nada
'Determinar el inicio de sesión exitoso y pagar el valor de la sesión
Sesión(lgName)=nombre de usuario
Sesión(lgPass)=userPass
Respuesta.Redireccionar inicio de sesiónOK.asp
Respuesta.Fin
terminar si
Fin Sub%>
Si puede comprender los archivos ASP, sabrá de un vistazo que después de iniciar sesión correctamente, la hoja saltará a loginOK.asp. Echemos un vistazo al código de esta hoja de inmediato.
<tipo de estilo=texto/css>
<!--
cuerpo {color de fondo: #FF9900;}
-->
</estilo>
<% IF Sesión(lgName)<> entonces %>
¡Has iniciado sesión exitosamente! ! ! El siguiente es un iframe que se introduce furtivamente en la página web para actualizar la página web a la hora especificada e informar al servidor si está en línea.
Para facilitar la distinción, utilizamos el blanco como color de fondo para la página web del marco.
<iframe border=0 nombre=nueva_fecha ancho de margen=0 espacio de cuadros=0 altura de margen=0 src=loginFrame.asp
frameborder=0 noResize width=100 scrolling=no height=30 vspale=0></iframe>
<% más %>
No ha iniciado sesión. Bienvenido a la red de información para webmasters: http://www.Net118.com
<% finaliza si %>
Si es una persona cuidadosa, sabrá inmediatamente que lo que debemos hacer a continuación es loginFrame.asp.
<!--#include file=loginCONN.ASP -->
<% CONN_Net118.Execute(Actualizar solo Iniciar sesión Establecer OLtime='& NOW() & ' donde OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%>;
Bien, hasta ahora nuestro programa está completo. La clave de este programa es determinar si el usuario está en línea, y no tengo más remedio que usar FRAME para anidar la hoja clave que se actualiza periódicamente para determinar si el usuario está en línea en la hoja. del programa principal Aquí, en la operación real, puede cambiar el ancho y alto del iframe a 0 para que los usuarios normales no puedan verlo, o hacer que el color de fondo de la página web del programa principal sea el mismo que el del programa principal. Página web anidada que se actualiza periódicamente y estará bien.
No hace mucho, vi a alguien en el foro de discusión decir que se puede determinar usando cosas como sesiones y cookies. Esto es obviamente imposible, porque los objetos que generan solo funcionan en sí mismos y su contenido de datos no se puede compartir con otros usuarios. todos. La aplicación debería ser otra forma de lograr este propósito, pero abandoné esta idea cuando pensé que si hay muchos usuarios iniciando sesión al mismo tiempo, se generarán al menos de uno a tres objetos de aplicación para cada usuario, porque entonces nuestro original servidor pobre Definitivamente será arrastrado hacia abajo ~