Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
BRuckey

usuarios online com banco de dados

Question

Usuários Online com Banco de Dados

(Melhor para quem usa tem hopedagem grátis!)

Ireis está iniciando a postagem de alguns artigos que acho muito útil e acho de

plena importancia eu postar aqui pra meus amigos programadores web também

saberem.

Primeiramente irei postar um artigo de Usuários Online com Banco de Dados

muito mais confiável do que o sistema utilizando Global.asa.

Eu irei utilizar ASP / MySQL porém pode ser utilizado ASP / Access.

Iremos primeiro criar a tabela no MySQL chamada Online com os seguintes

campos:

Campo - Tipo - Tamanho

-----------------------------------

ID - INT - 10

HostIP - VARCHAR - 20

DataAcesso - DATETIME

Pagina - TEXT

Feito este campos será necessário indicar os code e as subrotinas da páginas a

serem acessadas.

view_online.asp

strSQL = "SELECT Sum(1) As Total FROM Online"

Set Rs = Conexao.Execute(strSQL)

IF isNull(Rs("Total")) THEN
  Response.Write "N/A"
ELSE
  IF Rs("Total") = 1 THEN
    Response.Write "1 Usuário Online"
  ELSE
    Response.Write Rs("Total") & " Usuários Online"
  END IF
END IF

Rs.Close
Set Rs = Nothing
PS: Conexão você deve utilizar a seguinte linha para conexao
Set Conexao = Server.CreateObject("ADODB.Connection")
  Conexao.Open 

"driver={MySQL};DATABASE=nome_do_banco;SERVER=ip_servidor;UID=usuario_d

o_banco;PASSWORD=senha_do_banco"
O arquivo view_online.asp deverá ser colocado como include no local onde ira mostrar a quantidade de´usuários online. Agora iremos montar as duas subrotinas que irão verificar quem está online e adicionar os offline após alguns minutos sem acesso. Você deverá colocar este código no começo de todas as paginas ou uma include que é chamada em todas as páginas.
Call userOffline()
Call userOnline()
Agora iremos montar a subrotina userOffline() que irá ser responsavel para verificar se o visitante ainda está no site ou já saiu.
Sub userOffline()

  ' UPDATE todos os usuários do Online após 10 minutos
  timeleft = DATEADD("n", -10, Now())
  Call ExecuteSQL("DELETE FROM Online WHERE DataAcesso < '"& 

DataMySQL(timeleft) &"';")
End Sub
Ele irá pegar todos os registros da tabela que tenha o ultimo acesso por mais de 10 minutos e ira deletar ou seja Digamos que você acesse o site as 10 horas porem sai as 10:05 e o site não tem como saber se você saiu ou não por isso se as 10:16 você não tiver mais visitado nenhuma página ele ira colocar você como offline Agora iremos montar a subrotina userOnline() que irá ser repsonsavel para atualizar na tabela Online a data do ultimo acesso a páginas do site, pois ai o sistema irá saber que você ainda esta navegando no site. Sub userOnline() QueryStrr = "?" & Request.ServerVariables("query_String") strSQL = "Select * From Online Where HostIP = '" & Request.servervariables("REMOTE_ADDR") & "'" Set Rs = Conexao.Execute(strSQL) If Rs.BOF AND Rs.EOF Then Call ExecuteSQL("INSERT INTO Online(HostIP,DataAcesso,Pagina) VALUES('" & Request.servervariables("REMOTE_ADDR") & "', '" & DataMySQL(Now()) & "', '" & Request.ServerVariables("SCRIPT_NAME") & QueryStrr & "');") Else Call ExecuteSQL("UPDATE Online SET DataAcesso = '" & DataMySQL(Now()) & "',Pagina = '" & Request.ServerVariables("SCRIPT_NAME") & QueryStrr & "' Where HostIP = '" & Request.servervariables("REMOTE_ADDR") & "';") End If FechaRs(Rs) End Sub Na variavel QueryStrr ele ira pegar o valor da pagina com querystring ou seja muitos programadores utilizando páginas da seguinte forma index.asp?link=cadastro&cat=jogos e se não tiver isso a página sempre seria grava como index.asp Verificamos se o numero ip ( que é pode onde iremos identificar cada usuário, porém você pode trocar por id caso seje um página de acesso restrito ) se aquele ip esta já na tabela como online , se tiver ele irá apenas atualizar a data atual pra dizer que está ativo no sistema, caso não tiver o ip ele ira adicionar um novo registro na tabela. No campo pagina ele ira atualizar ou irá adicionar a página que o visitante está online, depois você pode faezr uma pagina para mostrar quantos usuários estão online, ou quem sabe as páginas mais visitas, etc.. Agora irei explicar algumas funções que acho necessário no code. Estas funções eu utilizo num arquivo chamado db onde tem algumas funções que julgo necessário e não preciso ficar remontando vários code sendo que já tenho as funções prontas. A primeira é a DataMySQL é para transformar a data no formato yyyy/mm/dd hh:nn:ss que é o formato do mySQL. A segunda é a ExecuteSQL é apenas um função que utilizo para executar um Insert, Update ou Delete
Function DataMySQL(sData)

  sMes    = Month( sData )
  sDia    = Day( sData )
  sHoras    = Hour( sData )
  sMinutos  = Minute( sData )
  sSegundos  = Second( sData )

  If sMes <= 9 Then sMes = "0" & sMes
  If sDia <= 9 Then sDia = "0" & sDia
  If sHoras <= 9 Then sHoras = "0" & sHoras
  If sMinutos <= 9 Then sMinutos = "0" & sMinutos
  If sSegundos <= 9 Then sSegundos = "0" & sSegundos
  
  DataMySQL = Year(sData) & "-" & sMes & "-" & sDia & " " & sHoras & ":" 

& sMinutos & ":" & sSegundos

End Function

Sub ExecuteSQL(xstrSQL)
  Conexao.Execute(xstrSQL)
End Sub

Espero ter ajudado, at+ galéra!!!!!

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Este exemplo tem uma pequena falha: Se o usuários estiver acessando de uma LAN HOUSE, ou vários usuários usando o mesmo server Proxy.... vai dar pau!!!! Pois estaram utilizando o mesmo numero de IP para acessar o seu site.

Sugiro que quem utilizar este exemplo adicione um campo na tabela chamado "sessao" e grave neste campo o valor numérico de sessão que o servidor gera automaticamente para cada conexão.

Para isso use a seguinte instrução: IdSes = Session.SessionID

Assim você captura o numero de sessão e faz a consulta chaveada por ( IP x SESSAO ) na hora de inserir novo registro na função userOnLine().

Exemplo SQL para atualizar : "UPDATE blablabla... WHERE `HostIP`='"&HostIp&"' AND `sessao`= '"&idSes&"' LIMIT 1;"

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148575
    • Total Posts
      644272
×
×
  • Create New...