Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cajau

[Resolvido] Quem está online?

Recommended Posts

Olá, senhores!! :)

 

Eu possuo um sistema em meu site que mostra usuários online, sem o uso do Global.asa, pois este definitivamente não funciona em meu servidor.

 

Eu humildemente gostaria que alguém me ajudasse numa questão, pois quero que esse sistema verifique no banco de dados "usuarios.mdb" e mostre também os usuários registrados que estão online.

 

Cada usuário cadastrado possui uma ID. O sistema poderia pegar essa ID e gravar num cookie, para que toda vez que esse usuário cadastrado entrar no site o seu nome de usuário ser mostrado na página principal, e quando ele fechar a página, mesmo sem fazer logout, o seu nome de usuário cadastrado saia da lista.

 

Exemplo:

24 usuários online nesse momento. (já existe funcionando)

2 membros cadastrados: Cajau, alguem, fulano... (gostaria que funcionasse)

 

Espero ter explicado direito, e aguardo ansioso pela ajuda!

 

Segue abaixo meu código atual:

 

Activeusers.asp

<%
Sub LogActiveUser
          Dim strActiveUserList
          Dim intUserStart, intUserEnd
          Dim strUser
          Dim strDate

          strActiveUserList = Application("ActiveUserList")

      If Instr(1, strActiveUserList, Session.SessionID) > 0 Then
          Application.Lock
          intUserStart = Instr(1, strActiveUserList, Session.SessionID)
          intUserEnd = Instr(intUserStart, strActiveUserList, "|")
          strUser = Mid(strActiveUserList, intUserStart, intUserEnd - intUserStart)
          strActiveUserList = Replace(strActiveUserList, strUser, Session.SessionID & ":" & Now())
          Application("ActiveUserList") = strActiveUserList
          Application.UnLock
      Else
          Application.Lock
          Application("ActiveUsers") = CInt(Application("ActiveUsers")) + 1
          Application("ActiveUserList") = Application("ActiveUserList") & Session.SessionID & ":" & Now() & "|"
          Application.UnLock
      End If
End Sub

Sub ActiveUserCleanup
          Dim ix
          Dim intUsers
          Dim strActiveUserList
          Dim aActiveUsers
          Dim intActiveUserCleanupTime
          Dim intActiveUserTimeout

          intActiveUserCleanupTime = 1 'In minutes, how often should the ActiveUserList be cleaned up.
          intActiveUserTimeout = 5 'In minutes, how long before a User is considered Inactive and is deleted from ActiveUserList

      If Application("ActiveUserList") = "" Then Exit Sub

      If DateDiff("n", Application("ActiveUsersLastCleanup"), Now()) > intActiveUserCleanupTime Then

          Application.Lock
          Application("ActiveUsersLastCleanup") = Now()
          Application.Unlock

          intUsers = 3
          strActiveUserList = Application("ActiveUserList")
          strActiveUserList = Left(strActiveUserList, Len(strActiveUserList) - 1)

          aActiveUsers = Split(strActiveUserList, "|")

      For ix = 0 To UBound(aActiveUsers)
          If DateDiff("n", Mid(aActiveUsers(ix), Instr(1, aActiveUsers(ix), ":") + 1, Len(aActiveUsers(ix))), Now()) > intActiveUserTimeout Then
              aActiveUsers(ix) = "XXXX"
          Else
              intUsers = intUsers + 1
          End If 
      Next

          strActiveUserList = Join(aActiveUsers, "|") & "|"
          strActiveUserList = Replace(strActiveUserList, "XXXX|", "")

          Application.Lock
          Application("ActiveUserList") = strActiveUserList
          Application("ActiveUsers") = intUsers
          Application.UnLock

      End If

End Sub
%>

E pra exibir os usuários uso a seguinte chamada:

 

ver.asp

<%
Call LogActiveUser()
Call ActiveUserCleanup()
Response.Write Application("ActiveUsers") & " usuários online nesse momento."
%>

banco = usuarios.mdb

tabela = usuarios

campos = ID, username, etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria igaul ao sistema do forum, mostra os users online total e depois mostra

na verdade, você tera k verificar , e pegar tipo assim k o user fizer o login, jogar o ID em uma tabela auxiliar

e depois selecionado o user dentro dela, dae você pode passar mais detalhes do mesmo e tb jogar essas info dentro do cookie...

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria igaul ao sistema do forum, mostra os users online total e depois mostra

na verdade, você tera k verificar , e pegar tipo assim k o user fizer o login, jogar o ID em uma tabela auxiliar

e depois selecionado o user dentro dela, dae você pode passar mais detalhes do mesmo e tb jogar essas info dentro do cookie...

 

Pois é.. quando o usuário faz login no site um cookie com a ID é gravado.

Para o sistema de login do site eu gravo um cookie com "username"

O sistema de users cadastrados online eu gravo um cookie com "id"

Para isso eu uso o seguinte:

 

  Response.Cookies("username") = rsUser("username")
  Response.Cookies("id") = rsUser("id")
  Application("idonline") = Application("idonline") &  Request.Cookies("id") & ","

Está funcionando, até aí, perfeitamente!

O nome de usuário aparece na lista de online...

 

O cookie para "username" o usuário seta para não expirar, se ele quiser. Então sempre que ele entrar no site estará "logado".

O mesmo não acontece com o sistema de "usuários online"

 

Eu penso em fazer realmente como aqui no Fórum. Mostrar o user cadastrado quando ele estiver online, e depois decrementar quando ele sair.

 

Então eu gostaria de saber o que pode estar errado com o código abaixo, se alguém puder me ajudar!

Eu ficarei realmente muito agradecido!

 

<!--#include file="activeusers.asp"-->
<!--#include file="conn.asp"-->
<script language="VBScript" runat="server"> 
Sub Application_onstart
	Session.Timeout = 5
		Application.Lock() 
	Application("idonline") = "" 
		Application.UnLock() 
End Sub 
Sub Application_onend 
		Application.Lock() 
	Application("idonline") = "" 
		Application.UnLock() 
End Sub 
Sub Session_onend
		Application.Lock()
	Application("idonline") = Replace(Application("idonline"),Request.Cookies("id")&",","")

		Application.UnLock()
End Sub
</script>
<%
username = Request.Cookies("username")
%>

<%
sql = "SELECT username, id FROM users WHERE username = '" & username & "'"
	Set rsUser = Server.CreateObject("ADODB.Recordset")
	rsUser.Open sql, conn, 3, 3

If (not rsUser.BOF) and (not rsUser.EOF) = True then
  
	Response.Cookies("id") = rsUser("id")
	Application("idonline") = Application("idonline") &  Request.Cookies("id") & ","
end if
%>

<%
If NOT Application("idonline") = "" Then  
	ids = Cstr(Application("idonline")) 
	ids = Left(ids,(Len(ids)-1))
End If 
	Dim rs_user 
	rs_user = "1" 
If (ids <> "") Then  
	rs_user = ids 
End If 
	Dim rs_useron 
Dim rs_useron_numRows 
 
	Set rs_useron = Server.CreateObject("ADODB.Recordset") 
	rs_useron.ActiveConnection = conn 
	rs_useron.Source = "SELECT username, dob FROM users WHERE id IN(" + Replace(rs_user, "'", "''") + ") ORDER BY username" 
	rs_useron.CursorType = 0 
	rs_useron.CursorLocation = 2 
	rs_useron.LockType = 1 
	rs_useron.Open() 
	 
	rs_useron_numRows = 0 
	 
	Dim rs_usercount__idApp 
	rs_usercount__idApp = "1" 
If (ids <> "") Then  
  rs_usercount__idApp = ids 
End If 
 
	Dim rs_usercount 
	Dim rs_usercount_numRows 
 
	Set rs_usercount = Server.CreateObject("ADODB.Recordset") 
	rs_usercount.ActiveConnection = conn
	rs_usercount.Source = "SELECT COUNT(*) as total FROM users WHERE id IN(" + Replace(rs_usercount__idApp, "'", "''") + ")" 
	rs_usercount.CursorType = 0 
	rs_usercount.CursorLocation = 2 
	rs_usercount.LockType = 1 
	rs_usercount.Open() 
 
	rs_usercount_numRows = 0 
 
	Dim Repeat2__numRows 
	Dim Repeat2__index 
 
	Repeat2__numRows = -1 
	Repeat2__index = 0 
	rs_useron_numRows = rs_useron_numRows + Repeat2__numRows 
%> 
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><font color="#769AB1"><%=(rs_usercount.Fields.Item("total").Value)%> usuário(s) cadastrado(s) online:</font> 

<%  
	While NOT rs_useron.EOF 
%> 

<%
If (rs_useron.Fields.Item("username").Value) = "Cajau" Then 
	Response.Write("<b><font color=#3399FF>"&(rs_useron.Fields.Item("username").Value)&"</font></b>")
Else 
	Response.Write((rs_useron.Fields.Item("username").Value))
End If
%> 

<% If NOT (Repeat2__index+1 = (rs_usercount.Fields.Item("total").Value)) Then Response.Write(", ")%> 

<%  
	Repeat2__index=Repeat2__index+1 
	Repeat2__numRows=Repeat2__numRows-1 
	rs_useron.MoveNext() 
Wend 
%> 
</td></tr></table>

<% 
	rs_useron.Close() 
	Set rs_useron = Nothing 
%> 

<% 
	rs_usercount.Close() 
	Set rs_usercount = Nothing 
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci de mencionar:

 

Se o usuário clicar em "Sair do sistema" o nome dele é decrementado da lista de cadastrados onlines...

Mas eu gostaria que isso acontecesse quando o usuário fechasse o navegador.

Uma espécie de Session.Timeout sem global.asa

Observe que eu uso isso para funcionar o Activeusers.asp como mostrei no primeiro code postado, mas não consigo adaptar para esse de cadastrados online

 

Quando o servidor resolve, por si só, resetar as sessions, a lista de usuários online é resetada. beleza.

Mas para o meu nome aparecer na lista novamente eu tenho que fazer um novo login, mesmo que eu já esteja logado.

Ou seja, o sistema de users online não reconhece quando meu username está logado...

 

Desculpa se eu estou enchendo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO Graças a Deus :D

 

Bom, pessoal, como eu já esperava, não consegui ajuda para resolver meu mproblema em fazer esse sistema de Usuários Cadastrados Online em ASP (igual ao do Fórum em PHP), pois pesquisei até em sites e fóruns internacionais e não encontrei nada sobre o assunto.

 

Quebrei a cabeça até conseguir fazer funcionar (meio precariamente) com algumas adaptações de códigos prontos que encontrei por aí.

Acredito que será de grande utilidade para muitos que não utilizam o arquivo Global.asa

 

Segue abaixo os códigos, e espero que alguém com mais experiência possa melhorá-los! :)

 

activeusers.asp

<%
Response.Expires=0
Response.Buffer = True 
Response.ExpiresAbsolute = Now() - 1
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control", "private" 
Response.AddHeader "pragma", "no-cache"
%>
<script language="VBScript" runat="server"> 
Sub Application_onstart
	Session.Timeout = 10
		Application.Lock() 
	Application("id.online") = "" 
		Application.UnLock() 
End Sub 
Sub Application_onend 
		Application.Lock() 
	Application("id.online") = "" 
		Application.UnLock() 
End Sub 
Sub Session_onend
		Application.Lock()
	Application("id.online") = Replace(Application("id.online"),Request.Cookies("id")&",","")
		Application.UnLock()
End Sub
</script>
<%
Sub LogActiveUser
	Dim strActiveUserList
	Dim intUserStart, intUserEnd
	Dim strUser
	Dim strDate
	strActiveUserList = Application("ActiveUserList")

	If Instr(1, strActiveUserList, Session.SessionID) > 0 Then
		Application.Lock
		intUserStart = Instr(1, strActiveUserList, Session.SessionID)
		intUserEnd = Instr(intUserStart, strActiveUserList, "|")
		strUser = Mid(strActiveUserList, intUserStart, intUserEnd - intUserStart)
		strActiveUserList = Replace(strActiveUserList, strUser, Session.SessionID & ":" & Now())
		Application("ActiveUserList") = strActiveUserList
		Application.UnLock
          
	Else
		Application.Lock
		Application("ActiveUsers") = CInt(Application("ActiveUsers")) + 1
		Application("ActiveUserList") = Application("ActiveUserList") & Session.SessionID & ":" & Now() & "|"
		Application.UnLock

	End If
End Sub

Sub ActiveUserCleanup
	Dim ix
	Dim intUsers
	Dim strActiveUserList
	Dim aActiveUsers
	Dim intActiveUserCleanupTime
	Dim intActiveUserTimeout

	intActiveUserCleanupTime = 2 'Em minutos, para que a ActiveUserList seja limpa.
	intActiveUserTimeout = 10 'Em minutos, para verificar, após esse tempo, se um usuário está inativo e deletá-lo da ActiveUserList.

	If Application("ActiveUserList") = "" Then Exit Sub

	If DateDiff("n", Application("ActiveUsersLastCleanup"), Now()) > intActiveUserCleanupTime Then

		Application.Lock
		Application("ActiveUsersLastCleanup") = Now()
		Application.Unlock

		intUsers = 0
		strActiveUserList = Application("ActiveUserList")
		strActiveUserList = Left(strActiveUserList, Len(strActiveUserList) - 1)

		aActiveUsers = Split(strActiveUserList, "|")

	For ix = 0 To UBound(aActiveUsers)
	If DateDiff("n", Mid(aActiveUsers(ix), Instr(1, aActiveUsers(ix), ":") + 1, Len(aActiveUsers(ix))), Now()) > intActiveUserTimeout Then
		aActiveUsers(ix) = "XXXX"
		
		Application.Lock()
			Application("id.online") = Replace(Application("id.online"),Request.Cookies("id")&",","")
		Application.UnLock()
	Else
		intUsers = intUsers + 1
	End If 
Next

strActiveUserList = Join(aActiveUsers, "|") & "|"
strActiveUserList = Replace(strActiveUserList, "XXXX|", "")

	Application.Lock
		Application("ActiveUserList") = strActiveUserList
		Application("ActiveUsers") = intUsers
	Application.UnLock
End If

End Sub
%>

online.asp

<!--#include file="activeusers.asp"-->
<!--#include file="conn.asp"-->
<%
Response.Expires=0
Response.Buffer = True 
Response.ExpiresAbsolute = Now() - 1
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control", "private" 
Response.AddHeader "pragma", "no-cache"
%>
<%
username = Request.Cookies("username")
%>

<%
sql = "SELECT username, id FROM users WHERE username = '" & username & "'"
	Set rsUser = Server.CreateObject("ADODB.Recordset")
	rsUser.Open sql, conn, 3, 3
%>

<%
If (not rsUser.BOF) and (not rsUser.EOF) = True then
	Response.Cookies("id") = rsUser("id")
	Application("id.online") = Application("id.online") &  Request.Cookies("id") & ","
end if
%>

<%
If NOT Application("id.online") = "" Then  
	ids = Cstr(Application("id.online")) 
	ids = Left(ids,(Len(ids)-1))
End If 
	Dim rs_user 
	rs_user = "1"
If (ids <> "") Then  
	rs_user = ids 
End If 
	Dim rs_useron 
Dim rs_useron_numRows 
 
	Set rs_useron = Server.CreateObject("ADODB.Recordset") 
	rs_useron.ActiveConnection = conn 
	rs_useron.Source = "SELECT username, dob FROM users WHERE id IN(" + Replace(rs_user, "'", "''") + ") ORDER BY username" 
	rs_useron.CursorType = 0 
	rs_useron.CursorLocation = 2 
	rs_useron.LockType = 1 
	rs_useron.Open() 
	 
	rs_useron_numRows = 0 
	 
	Dim rs_usercount__idApp 
	rs_usercount__idApp = "1" 
If (ids <> "") Then  
  rs_usercount__idApp = ids 
End If 
 
	Dim rs_usercount 
	Dim rs_usercount_numRows 
 
	Set rs_usercount = Server.CreateObject("ADODB.Recordset") 
	rs_usercount.ActiveConnection = conn
	rs_usercount.Source = "SELECT COUNT(*) as total FROM users WHERE id IN(" + Replace(rs_usercount__idApp, "'", "''") + ")" 
	rs_usercount.CursorType = 0 
	rs_usercount.CursorLocation = 2 
	rs_usercount.LockType = 1 
	rs_usercount.Open() 
 
	rs_usercount_numRows = 0 
 
	Dim Repeat2__numRows 
	Dim Repeat2__index 
 
	Repeat2__numRows = -1 
	Repeat2__index = 0 
	rs_useron_numRows = rs_useron_numRows + Repeat2__numRows 
%> 
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><font color="#769AB1"><%=(rs_usercount.Fields.Item("total").Value)%> usuário(s) cadastrado(s) online:</font> 

<%  
	While NOT rs_useron.EOF 
%> 

<%

'Mostra determinados usuários em cores diferentes. Bom para determinar usuários com níveis diferentes no site.

If (rs_useron.Fields.Item("username").Value) = "Cajau" Then 
	Response.Write("<b><font color=#3399FF>"&(rs_useron.Fields.Item("username").Value)&"</font></b>")
ElseIf (rs_useron.Fields.Item("username").Value) = "di_giorgio" Then 
	Response.Write("<b><font color=#3399FF>"&(rs_useron.Fields.Item("username").Value)&"</font></b>")
ElseIf (rs_useron.Fields.Item("username").Value) = "Miss" Then 
	Response.Write("<b><font color=#FF00FF>"&(rs_useron.Fields.Item("username").Value)&"</font></b>")
ElseIf (rs_useron.Fields.Item("username").Value) = "Brunella" Then 
	Response.Write("<b><font color=#FF00FF>"&(rs_useron.Fields.Item("username").Value)&"</font></b>")	
ElseIf (rs_useron.Fields.Item("dob").Value) = 1 Then 
	Response.Write("<b>"&(rs_useron.Fields.Item("username").Value)&"</b>") 
Else

'Usuários comuns cadastrados no site

	Response.Write((rs_useron.Fields.Item("username").Value))
End If
%> 

'Acrescenta uma vírgula após os nomes de usuários, caso tenha mais de 1 para ser mostrado
<% If NOT (Repeat2__index+1 = (rs_usercount.Fields.Item("total").Value)) Then Response.Write(", ")%> 

<%  
	Repeat2__index=Repeat2__index+1 
	Repeat2__numRows=Repeat2__numRows-1 
	rs_useron.MoveNext() 
Wend 
%> 
</td></tr></table>

<% 
	rs_useron.Close() 
	Set rs_useron = Nothing 
%> 

<% 
	rs_usercount.Close() 
	Set rs_usercount = Nothing 
%>

mostra.asp - página que exibe a quantidade total de users online + nomes dos users cadastrados online

<!--#INCLUDE file="activeusers.asp"-->
Existem
<%
Call LogActiveUser()
Call ActiveUserCleanup()

Response.Write Application("ActiveUsers") & " Usuários Online nesse momento."
%>
<br>
<!--#include file="online.asp"-->

login

Na rotina da sua página de login acrescente o seguinte código:

  Response.Cookies("id") = rsUser("id")
  Application("id.online") = Application("id.online") &  Request.Cookies("id") & ","

logout

Na rotina da sua página de logout acrescente o seguinte código:

If Request.Cookies("id") <> "" Then 
	Application("id.online") = Replace(Application("id.online"),Request.Cookies("id")&",","") 
	For Each objCookie In Request.Cookies 
	Response.Cookies(objCookie) = "" 
	Next 
	Session.Abandon() 
End If

Se alguém puder melhorar... Coloque depois na área de scripts prontos!!

Espero ter ajudado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, estarei disponibilizando no lab. de scripts...

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode verificar se o user ficou inativo por algum tempo e dar logoff nele

Compartilhar este post


Link para o post
Compartilhar em outros sites

inatividade nao quer dizer que ele nao esteja no site

 

tb nao posso derruba-lo pois trabalho com identificação por cookie, ele loga e gravo um cookie de 1 dia como se estivesse logado

 

o cookie serve pra eu nao terminar a sessao dele mantendo-o logado, mas ele pode nao estar no sistema

 

 

 

 

como aqui no forum

 

nao preciso me logar toda hora, e fico inativo e o sistema no me derruba, mas se eu sair nao consta mais que estou

Compartilhar este post


Link para o post
Compartilhar em outros sites

geralmente usando o tempo de inatividade para x minutos, pois assim você sabe se o user esta realmente online

no forum , o uso de cookies é para naun se logar toda hora, mas nesse caso de forum, é diferente de saber quem esta online, se o user naun estiver habilitado para cookie,tera k logar, assim contando kem esta online,mas se eu sair nao consta mais que estou, pois finaliza a sessaun e se for entrar vai verificar seu ID e dae ele contabiliza

Compartilhar este post


Link para o post
Compartilhar em outros sites

tempo inativo nao é a forma correta, nao no meu caso

 

como eu disse... inatividade nao quer dizer que ele nao esteja no site, nem quero interpretar dessa forma

 

ha paginas qu ele pode ficar varios minutos olhando sem atualizar, ai o sistema vai derruba-lo ou vai tirar da lista de online erradamente

 

 

 

 

clicar em sair ou fechar a janela, significa que ele saiu, se isso nao ocorrer ele estará no site mesmo que esteja 24h sem ler 1 letra apenas

 

o problema é se fechar a janela, ai o cookie nao vai para o ststus de 'offline'

 

 

 

 

o sistema postado pelo Cajau funciona caso o cara saia fechando a janela sem dar logout?

Compartilhar este post


Link para o post
Compartilhar em outros sites

naun sei se o sistema postado funciona caso o cara saia fechando a janela sem dar logout

 

realmente este item de inatividade, naun é de hoje k causa polemica, acredito k dependendo do segmento de atucaun, deve-se optar pela melhor forma a respeito do tempo inativo , senaun a possibilidade de ter una lista de online errada

Compartilhar este post


Link para o post
Compartilhar em outros sites

por isso que tempo de inatividade no meu caso esta fora, tenho aplicações que rodam em ajax e o usuario nao precisa atualizar a pagina

 

se o sistema interpretar meia hora de inatividade vai ser errado, mas ele pode star olhando as atualizações, os feeds...

 

tb nao rola de incluir um verificador em todas aplicações

 

 

 

 

parece que vai ser complicado

Compartilhar este post


Link para o post
Compartilhar em outros sites

é como falei,dependendo do segmento de atuacaun, deve-se optar pela melhor forma a respeito do tempo inativo, ou um metodo, tipo o msn, k apos tantos minutos, você pode trocar o status para ocupado ou tipo indisponivel, k naun contabilize diretamento no numero de usuarios online, pois eu poderia abrir o site e deixar apenas na tela para conatabilizar o numero de online, mas o certo seria ter uma tabela no bvd k se atualize, para o status...

ou no bom senso e deixar x minutos para , tipo no caso do user estar olhando as atualizações, os feeds, contar um numero aceitavel de intervalo do online...

Compartilhar este post


Link para o post
Compartilhar em outros sites

detectar se a janela foi fechada é a melhor forma

 

tinha visto um cod - em js se nao me engano - que verificava isso, vou procurar

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode colocar o js no evento onUnload , assim ja vi funcionar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

OnUnload só funciona em caso de saída realmente da página ou do browser por fechamento, caso trave ou o sistema reinicie ele não é executado.

 

Como já está usando AJAX sugiro uma rotina que a cada "X" minutos faça uma requisição ao servidor e informe a atual posição do usuário. Se nesses "X" minutos não houver essa requisição via AJAX o usuário pode ser considerado inativo pois com certeza quase absoluta estará fora de seu sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente como citei acima...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma pequena correção no código

 

online.asp


<%
sql = "SELECT username, id FROM users WHERE username = '" & username & "'"
Set rsUser = Server.CreateObject("ADODB.Recordset")
rsUser.Open sql, conn, 3, 3
%>

<%
If (not rsUser.BOF) and (not rsUser.EOF) = True then
Response.Cookies("id") = rsUser("id")
Application("id.online") = Application("id.online") &  Request.Cookies("id") & ","
end if
%>

Corrigir para:

 


<%
if Request.Cookies("id") = "" Then
sql = "SELECT username, id FROM users WHERE username = '" & username & "'"
  Set rsUser = Server.CreateObject("ADODB.Recordset")
  rsUser.Open sql, conn, 3, 3

If (not rsUser.BOF) and (not rsUser.EOF) = True then
  Response.Cookies("id") = rsUser("id")
  Application("id.online") = Application("id.online") + Request.Cookies("id") & ","
end if
end if
%>

 

Depois de certo tempo, com muitos reloads nas páginas (pageviews), tava dando pau e um erro doido no sistema.

Descobri que é por causa da linha abaixo:

 


Application("id.online") = Application("id.online") + Request.Cookies("id") & ","

A cada reload na página, ou fazendo pageview em outras páginas do site, sempre acrescentava meu ID na Aplicação id.online e estava ficando +- assim: 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,

 

Com essa mudança ele só cria e insere meu ID na Aplicação caso o ID ainda não exista.

Bom, acho que é isso.

Ainda sou uma anta em ASP, mas estou aprendendo muito com vocês!

É uma honra estar aqui!

 

Abraços!!

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.