〓Introdução〓
Qualquer pessoa com bom senso sabe que é obviamente absurdo usar ASP para fazer esta função, porque não são mensagens instantâneas como QQ, MSN ou salas de bate-papo IRC. Todos dependem da atualização da página da web para alterar o horário da última atividade. para saber se o usuário está online. Portanto, não espere que o tutorial a seguir seja perfeito. Acabei de gravar meu modo de pensamento. Se houver algo errado, peça conselhos aos especialistas!
-------------------------------------------------- ----------------------------------
〓Texto〓
Em primeiro lugar, deixe-me apresentar a você minha ideia de como conseguir esse efeito. Se você conseguir entender depois de ler minha ideia, não há necessidade de ler este artigo...
Só consigo pensar em duas maneiras de implementar esta função:
1. banco de dados+asp
Pode ser mais complicado de fazer, mas é adequado para sistemas com grande número de usuários logados.
2. aplicativo
Use o objeto de aplicativo: Se você estiver construindo uma comunidade grande, pode ser necessário gerar uma aplicação para cada ID de login. Embora o design do programa seja mais simples, há muitos usuários logados e isso nunca consumirá recursos do servidor. defendo isso aqui. Porque é fácil gerar o objeto de aplicação quando o usuário efetua login, mas ele deve ser completamente liberado quando o usuário sai do sistema, até agora não vi um método melhor.
Então, vamos dar uma olhada em como usar banco de dados + asp para resolver o problema de que a mesma conta não consegue fazer login ao mesmo tempo!
Primeiro peça ao usuário para criar um banco de dados. Aqui usamos o acesso para criar um novo onlyNet118.mdb.
Tabela de dados 1: usuários armazenam informações de registro do usuário
As seguintes tabelas de dados são configuradas: uID (número automático) userName (tipo de caractere) userPass (tipo de caractere)
Tabela de dados 2: onlyLogin armazena informações de login temporárias do usuário
As seguintes tabelas de dados são configuradas: OLname (tipo de caractere) OLtime (tipo de data) OLip (tipo de caractere)
Depois que o banco de dados é construído, adicionamos dados diretamente à tabela de usuários manualmente, adicionamos Net118 à tabela userName e adicionamos 111 à tabela userPass. Para destacar o foco de nossa discussão neste artigo e remover bobagens desnecessárias, a senha. não deve ser criptografado e o nome do usuário deve ser próprio Add~haha~.
Ok, agora há um banco de dados de usuários no banco de dados. Vamos fazer a interface de login do usuário. Copie o código a seguir e salve-o no arquivo onlyLogin.asp.
<html>
<cabeça>
<meta http-equiv=Content-Type content=text/html;
<title>Net118.COM proíbe login simultâneo da mesma conta em regiões diferentes</title>
</head>
<corpo>
<nome do formulário=form1 método=post action=loginPost.asp>
Nome de usuário: <input name=userName type=text id=userName size=15 maxlength=5>
Senha: <nome de entrada=tipo userPass=id da senha=tamanho userPass=15 maxlength=15>
<tipo de entrada=nome de envio=Valor de envio=Login>
</form>
</body>
</html>
Após a conclusão, crie um novo arquivo loginCONN.asp, copie o código abaixo e salve-o! Está conectado ao banco de dados, não vou explicar muito...
<%
Escurecimento CONN_Net118
Dim Conexão_T
Escurecer mmdd
mmdd=somenteNet118.mdb
Definir CONN_Net118 = Server.CreateObject(ADODB.Connection)
Conn_T=Provider=Microsoft.Jet.OLEDB.4.0;Fonte de dados= & Server.MapPath(&mmdd&)
em caso de erro, retome a seguir
CONN_Net118.Abrir Conexão_T
%>
A seguir criamos um arquivo loginPost.asp que também existe neste diretório. Isso é mais crítico.
<!--#include arquivo=loginCONN.asp -->
<%
'Excluir usuários ativos dentro do tempo maxTime, maxTime foi definido no arquivo loginCONN.asp
Conn_Net118.Execute(Excluir de onlyLogin onde DATEDIFF('s',OLtime, now()) > & maxTime & )
'================================================ ================
Dim rs, ts, txt, sql, userName, userPass
se Request.Form(Submit)=Login então
userName=Request.Form(userName)'Obter nome de login do usuário do formulário
userPass=Request.Form(userPass)' Obtenha a senha de login do usuário do formulário
'Como não estamos discutindo questões de segurança aqui, as senhas dos usuários não são criptografadas.
Definir rs = Server.CreateObject(ADODB.RECORDSET)
sql=SELECT * FROM usuários onde userName = ' & userName & ' e userPass = ' & userPass & '
rs.Abrir sql, CONN_Net118,1,1
SE não for rs.eof então
Call isOK(userName) ' Chame este processo se o nome de usuário e a senha estiverem corretos, isOK será personalizado no programa a seguir.
outro
Response.Write(<a href=javascript:history.go(-1)>Nome de usuário ou senha incorretos</a>)
Resposta.End()
terminar se
rs.Fechar
Definir rs=Nada
terminar se
Sub está OK (nome do usuário)
Dim Olip 'O IP salvo pelo nome de usuário de login atual no banco de dados
Dim Oltime ' A última vez que a página da web foi atualizada quando o nome de usuário de login atual é salvo no banco de dados é um dado importante para calcular se o usuário está online.
Dim OLip1 'Grava o IP de login do usuário atual, usado para distinguir se é o mesmo usuário.
OLip1=Request.ServerVariables(REMOTE_ADDR)'Obtém o IP do usuário que enviou informações de login
Defina ts=Conn_Net118.execute(Selecione * FROM onlyLogin WHERE OLname='& userName & ')
if not ts.eof then ' Consulta o banco de dados para ver se há alguma informação de login para este usuário
OLtime=ts(OLtime)
OLip=ts(OLip)
se OLip1<>OLip e DateDiff(s,OLtime,now()) < maxTime então
'A frase anterior determina se o IP do usuário de login enviado não é o último IP do usuário registrado no banco de dados e
'Se a diferença entre o horário da última atividade do usuário e o horário atual não exceder o número especificado de segundos, é confirmado que o usuário está online no momento.
Response.Write <a href=javascript:history.go(-1)>Este usuário está online no momento. Você não pode fazer login nesta conta de outros lugares! </a>
Resposta.End()
outro
'Caso contrário, será determinado que o login foi realizado com sucesso e o valor será pago à sessão.
Sessão(lgName)=nomedeusuário
Sessão(lgPass)=userPass
Resposta.Redirect loginOK.asp
Resposta.Fim
terminar se
outro
'Se o banco de dados não tiver um registro de usuário de login, execute a seguinte instrução
Escurecer ls
Definir ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * De apenasLogin,CONN_Net118,2,2
ls.ADDNEW
ls(OLnome)=nomedeusuário
ls(OLip)=OLip1
ls(OLtime)=AGORA()
ls.UPDATE
ls.Fechar
Definir ls=Nada
'Determina o login bem sucedido e paga o valor para a sessão
Sessão(lgName)=nomedeusuário
Sessão(lgPass)=userPass
Resposta.Redirect loginOK.asp
Resposta.Fim
terminar se
Fim Sub %>
Se você consegue entender os arquivos asp, saberá rapidamente que após o login bem-sucedido, a folha irá para loginOK.asp. Vamos dar uma olhada no código desta folha imediatamente.
<tipo de estilo=texto/css>
<!--
corpo {cor de fundo: #FF9900;}
-->
</estilo>
<% SE Sessão(lgName)<> então %>
Você fez login com sucesso! ! ! A seguir está um iframe que é inserido na página da web para atualizá-la no horário especificado e informar ao servidor se você está online.
Para facilitar a distinção, usamos o branco como cor de fundo do quadro da página da web.
<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>
<% mais %>
Você não está logado. Bem-vindo à rede de informações para webmasters: http://www.Net118.com
<% fim se %>
Se você for uma pessoa cuidadosa, saberá imediatamente que o que precisamos fazer a seguir é loginFrame.asp
<!--#include arquivo=loginCONN.ASP -->
<% CONN_Net118.Execute(Atualização apenasLogin Set OLtime='& NOW() & 'onde OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%>;
Ok, até agora nosso programa está completo. A chave para este programa é determinar se o usuário está online, e não tenho escolha a não ser usar FRAME para aninhar a folha chave que é atualizada regularmente para determinar se o usuário está online na folha. do programa principal. Aqui, na operação real, você pode alterar a largura e a altura do iframe para 0 para que usuários comuns não possam vê-lo ou tornar a cor de fundo da página da web do programa principal igual à do programa principal. página da web aninhada atualizada regularmente e tudo ficará bem.
Não muito tempo atrás, vi alguém no fórum de discussão dizendo que isso pode ser determinado usando coisas como sessões e cookies. Isso é obviamente impossível, porque os objetos que eles geram funcionam apenas em si mesmos e seu conteúdo de dados não pode ser compartilhado com outros usuários. tudo compartilhado. Appliaction deveria ser outra forma de atingir esse propósito, mas desisti dessa ideia quando pensei que se houver muitos usuários logando ao mesmo tempo, pelo menos um a três objetos appliaction serão gerados para cada usuário, pois assim nosso original servidor ruim Definitivamente será arrastado para baixo ~