Ir para conteúdo
Fórum Script Brasil
  • 0

Contador De Visitas Dúvidas


[ GuTo ]

Pergunta

Fala galera!

Digamos q isso seja a continuação de outro tópico, porém para um outro assunto parecido. Isso pode ser um futuro problema seu!

Veja, quero fazer um contador de visitas (geral) SEM usar global.asa e SEM FileSystemObject.

Ele tem de estar dentro destes termos.

- Proibir da pessoa apertar F5 e somar mais uma visita. (Solução: uso de uma Session, por exemplo: Session("verifica") = 1 'para vistado, else não visitado)

- Proibir da pessoa fechar o browser e retornar ao site e contar mais uma visita. (Solução: IP)

Agora vamos imaginar se a pessoa A está no laboratório da faculdade Z e acessando o mesmo site da pessoa B, sabendo que neste laboratório todos tem o mesmo IP, a solução pra se saber que é uma nova visita será o SessionID.

Claro que não é em todos os laboratórios que tem todo o IP igual, em muitos só muda o final dele(o q vem deposi do último ponto (200.175.125.214).

Então, baseando-se nisso tudo, fiz uma tabela com 3 campos:

session_id - Texto

ip - Texto

hora - Data/Hora

Mas dae logo meu BD vai estar enorme!!! Guardando estes dados de cada nova visita, meu deus... imagina ter mais de 5mil registros, muito grande!

Portanto queria uma solução, e o q eu keria, era sempre a cada nova visita somar mais um ao valor do campo. Mas podendo fazer este controle todo aí. Dae sim vou ter um contador de visitas (geral) correto!!!

Fiz este código a seguir, dêem uma olhada para entende-lo!

Pensei em usar o Cookies pra poder minimizar este código pra ficar apto pra uma tabela com um campo q só q é somado mais um ao valor dela.

Com cookies talvez eu conseguisse guardar todos estes campos e simplesmente fazer a verificação, dae dependendo da resposta somar mais um ao valor do campo ou não. Se alguém souber mecher cookies e quiser dar uma ajuda wink.gif

Meu código abaixo!

contador.asp

<%
Option Explicit
dim session_id, agora, ip
dim rs, db, sql
dim rs2

set db = Server.CreateObject("ADODB.Connection")
db.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db/geral.mdb")

session_id = Session.SessionID
agora = Now
ip = Request.ServerVariables("REMOTE_ADDR")

sql = "SELECT * FROM contador WHERE session_id='"&session_id&"' OR ip='"&ip&"'"
set rs = db.execute(sql) 
if rs.eof then
	sql = "INSERT INTO contador (session_id,ip,hora) VALUES ('"&session_id&"','"&ip&"','"&agora&"')"
	db.Execute(sql)
else
	sql = "UPDATE contador SET hora='"&agora&"'"
	db.Execute(sql)
end if

sql = "SELECT * FROM contador"
set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.open sql,db,3,3 
if not rs2.eof then
	%><%=rs2.RecordCount%><%
end if

db.close
set db = nothing
set rs2 = nothing
set rs = nothing
%>

Anelisem ae...

Aguardo respostas, comentários, sugestões e quem sabe, um upgrade deste código wink.gif, Valeu!

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Brother!!!!

Na minha opinião, acho que você entendeu tudo o que disse em um outro POST.

Era isso mesmo que eu tentei lhe dizer, pegar a sessão e o IP, se não há cadastro, insira um e atualize a tabela.

Esta ótimo, muito bom.

Parabéns!!!

[urso]

OBS:

Metas para 2004: Terminar o 2ºgrau, trabalhar, malhar (já faço musculação), tirar cursos de informática (sem nenhum até o seguinte momento), passar no vestibular, entrar na faculdade e ficar bem de $$$, hehehe! Mulherada tem de sobra, uhhh

Só faltou você pedir um Cocô(não sei se tem acento, mas é a fruta!!! dry.gif ) para completar!!! wink.gif

Editado por urso.louco
Link para o comentário
Compartilhar em outros sites

  • 0

Hehehe, valeu aí!

Mas uma coisa que um amigo meu falou, um que nem conhece nada de web, que existe pessoas que tem IP fixo, que nunca muda mesmo depois de ter reiniciado.

Dae eu tive q mudar esta linha

sql = "SELECT * FROM contador WHERE session_id='"&session_id&"' OR ip='"&ip&"'"
para
sql = "SELECT * FROM contador WHERE session_id='"&session_id&"'"
e esta outra linha que estava errada
sql = "UPDATE contador SET hora='"&agora&"'"
para
sql = "UPDATE contador SET hora='"&agora&"' WHERE session_id='"&session_id&"'"

hehehe, esqueci do UÉRE..rs*

Urso.lokinhu (hehe) Não entendi sua observação... mas td bem. Era pra ser a fruta Coco wink.gif ou o excremento Côco sad.gif ?

Link para o comentário
Compartilhar em outros sites

  • 0

Fala Urso.

Antes de mais nada, estou esperando você dar uma analisada na minha resposta anterior a esta aki, beleza. wink.gif

Agora pra galera TODA... biggrin.gif

E assim, como eu queria antes, optmizar este código e o DB, pra não ocupar muito espaço, optei então trabalhar com cookies.

Nunca trabalhei com cookie, é a primeira vez. Pelo que testei aki em casa ficou perfeito. Gostaria que alguém aí testasse ou simplesmente desse uma olhadinha no código, conferisse e postasse aki a sua opnião e td mais.

Pra usar o contador de visitas (código) que logo mais abaixo está, você precisa:

- um banco de dados acess com uma tabela chamada contador, com um campo só chamado visitas do tipo Número

- pegar o código abaixo e salvar como contador.asp

<%
Option Explicit
dim rs, db, sql

set db = Server.CreateObject("ADODB.Connection")
db.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db/geral.mdb")

if Request.Cookies("session_id") = Session.SessionID then 
	Response.Cookies("session_id") = Session.SessionID
	Response.Cookies("ip") = Request.ServerVariables("REMOTE_ADDR")
else
	sql = "UPDATE contador SET visitas = visitas + 1"
	db.Execute(sql)
	Response.Cookies("session_id") = Session.SessionID
	Response.Cookies("ip") = Request.ServerVariables("REMOTE_ADDR")
end if

Response.Cookies("session_id").Expires="Jan 1, 2010"
Response.Cookies("ip").Expires="Jan 1, 2010"

sql = "SELECT * FROM contador"
set rs = Server.CreateObject("ADODB.Recordset")
rs.open sql,db,3,3 
if not rs.eof then
	%><%=rs("visitas")%><%
end if

db.close
set db = nothing
set rs = nothing
%>

Espero opniões, críticas, sugestões (ou até correções) e td mais sobre o mesmo.

Façam bom proveito e aguardo suas opniões.

Feliz ano novo! wink.gif

Obs.: o cookie ip não é necessário, só pra ocupar mais espaço no cookie do visitante, rs* wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Sou muito novato em ASP.. não entendo quase nada..

Como eu crio um banco?? Me explikem direitinho em x)

alguém pode mandar ai o DOWNLOAD do banco pronto?

Editado por Miranda
Link para o comentário
Compartilhar em outros sites

  • 0

Fala Urso.

Antes de mais nada, estou esperando você dar uma analisada na minha resposta anterior a esta aki, beleza.

Agora pra galera TODA... 

E assim, como eu queria antes, optmizar este código e o DB, pra não ocupar muito espaço, optei então trabalhar com cookies.

Nunca trabalhei com cookie, é a primeira vez. Pelo que testei aki em casa ficou perfeito. Gostaria que alguém aí testasse ou simplesmente desse uma olhadinha no código, conferisse e postasse aki a sua opnião e td mais.

Pra usar o contador de visitas (código) que logo mais abaixo está, você precisa:

- um banco de dados acess com uma tabela chamada contador, com um campo só chamado visitas do tipo Número

- pegar o código abaixo e salvar como contador.asp

CODE 

<%

Option Explicit

dim rs, db, sql

set db = Server.CreateObject("ADODB.Connection")

db.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db/geral.mdb")

if Request.Cookies("session_id") = Session.SessionID then

Response.Cookies("session_id") = Session.SessionID

Response.Cookies("ip") = Request.ServerVariables("REMOTE_ADDR")

else

sql = "UPDATE contador SET visitas = visitas + 1"

db.Execute(sql)

Response.Cookies("session_id") = Session.SessionID

Response.Cookies("ip") = Request.ServerVariables("REMOTE_ADDR")

end if

Response.Cookies("session_id").Expires="Jan 1, 2010"

Response.Cookies("ip").Expires="Jan 1, 2010"

sql = "SELECT * FROM contador"

set rs = Server.CreateObject("ADODB.Recordset")

rs.open sql,db,3,3

if not rs.eof then

%><%=rs("visitas")%><%

end if

db.close

set db = nothing

set rs = nothing

%>

Espero opniões, críticas, sugestões (ou até correções) e td mais sobre o mesmo.

Façam bom proveito e aguardo suas opniões.

Feliz ano novo!

Obs.: o cookie ip não é necessário, só pra ocupar mais espaço no cookie do visitante, rs* 

Brother!!

Quanto a resposta ao POST anterior, era fruta mano, viu lá que até editei o POST ?

Eu testei seu código aqui em casa, hoje, ficou muito bom e legal, achei nota 10, mas me surgiu uma grande coisa que é necessario se pensar, hoje em dia, vamos dizer que 40% do visitantes da web, já usam o I.E 6.0, que o mesmo pode ser configurado para ignorar a manipulação de cookies (Guia Privacidade das opçoes da internet), se o mesmo estiver configurado desta forma seu cookie não vai ser adicionado e pode gerar uma pequeno atraso na sua aplicação ou até mesmo 'Erro', acho que no seu código só esta faltando esse controle de erro, caso não seja possivel adicionar o cookie. Há muito tempo atras, eu vi um código em JScript que fazia a verificação se o navegador aceitava cookie, se a verificação fosse negativa era gerada uma mensagem de alerta para o visitante para que o mesmo pudesse continuar no sistema, acho que é interessante você procurar o inserir este tipo de verificação para o seu sistema fica 'perfeito'.

Abraços e boa Entrada de Ano!!!

[urso]

Link para o comentário
Compartilhar em outros sites

  • 0

Poutz!!!

Agora que percebi, dei uma viajada na resposta anterior...

if Request.Cookies("session_id") = Session.SessionID then 
Response.Cookies("session_id") = Session.SessionID
Response.Cookies("ip") = Request.ServerVariables("REMOTE_ADDR")
else
sql = "UPDATE contador SET visitas = visitas + 1"
db.Execute(sql)
Response.Cookies("session_id") = Session.SessionID
Response.Cookies("ip") = Request.ServerVariables("REMOTE_ADDR")
end if

Essa instrução aqui já vai resolver seu problema. Ta completo, agora que olhei o DreamWeaverMX e analisei bem, isso já mata o problema, caso houvesse, do sistema.

Parabéns!!!

Muito bom mesmo, acho que este código deveria ficar pendurado na sessão de ASP para que outros visitantes possam olhar e se basear no seu código.

Abraços!!!

[urso]

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu aí pelos elogios, fico lesongeado tongue.gif

Também achei que ficou legal e deixaria até (hehehe) pendurar o tópico, mas primeiro coloquem os créditos meus no código wink.gif

Ae urso.louco meu brother, essa página aí funciona perfeitamente QUANDO ABERTA SOZINHA...

Agora crie um documento .asp EM BRANCO, SEM NADA DE CÓDIGO DENTRO, e coloque esse contador.asp (meu código) num include dentro desta página em branco. Ah, antes do include ponha um ponto, apenas um ponto ou qlqr outro caracter q quiser e teste (eu no exemplo abaixo coloquei um "A").

Vai dar este erro:

Objeto Response error 'ASP 0156 : 80004005'

Erro de cabeçalho

/swed/contador.asp, line 13

Os cabeçalhos HTTP já estão gravados no navegador cliente. Quaisquer modificações no cabeçalho HTTP devem ser feitas antes de gravar o conteúdo da página.

Só não sei porque! blink.gif

Pra você testar aí rápidinho, pegue este código aki:

A <!--#include file="contador.asp"-->

Se tu ou outra pessoa souberes a solução wink.gif, eu vou agradecer muito!!!

Pois eu precisava botar essa página no menu duma página minha wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Brother!!!

Me diga lá, há dois 'Option Explicit' no seu arquivo ? Há alguma configuração no servidor para adicionar cabeçalho automaticamente ? Seu include esta fora das TAG de identificação ASP <%%>?

Não era pra gerar este tipo de erro em um aquivo em branco...

:Abraços!!

[urso]

Link para o comentário
Compartilhar em outros sites

  • 0

Hehehehe, não capaz ursão, não ia cometer alguns destes erros grotescos.

Porém um amigo meu de outro fórum me deu a solução.

Se quiseres MESMO, eu posto aki e explico tudinhu wink.gif

Valeu, abraços aí brother!

Link para o comentário
Compartilhar em outros sites

  • 0

Isso mesmo brother!

Como já tinha dito, não tinha trabalhado com cookies ainda, e desconhecia o AddHeader, então assim... o cara só me disse pra colocar na página onde vai estar o include este código:

<%
Response.Buffer = True
Response.AddHeader "cache-control", "private"
Response.AddHeader "pragma", "no-cache"
Response.ExpiresAbsolute = #January 1, 1990 00:00:01#
Response.Expires=0
%>
Ok. Tudo bem, coloquei e tive q fazer algumas modificações no contador.asp que tava com problema, pois depoois que me deram um toque eu aprendi melhor como criar e pegar o cookie. Dae o código melhorado/corrigido ficou assim:
<%
dim rs, db, sql

set db = Server.CreateObject("ADODB.Connection")
db.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db/geral.mdb")

if Request.Cookies("contador")("session_id") = Session.SessionID then 
	Response.Cookies("contador")("session_id") = Session.SessionID
	Response.Cookies("contador")("ip") = Request.ServerVariables("REMOTE_ADDR")
else
	sql = "UPDATE contador_novo SET visitas = visitas + 1"
	db.Execute(sql)
	Response.Cookies("contador")("session_id") = Session.SessionID
	Response.Cookies("contador")("ip") = Request.ServerVariables("REMOTE_ADDR")
end if

Response.Cookies("contador").Expires="Jan 1, 2010"

sql = "SELECT * FROM contador_novo"
set rs = Server.CreateObject("ADODB.Recordset")
rs.open sql,db,3,3 
if not rs.eof then
	%><%=rs("visitas")%><%
end if

db.close
set db = nothing
set rs = nothing
%>

Tudo ok agora, tá que nem uma manteiga wink.gif

Só que eu NÃO sei quando que devo usar aquele códigozinho ali q tá o AddHeader e td mais sad.gif

Se puder explicar ou melhor, me dizer aonde posso saber mais sobre o assunto, te agradeço wink.gif

Valeu

Aproveitem o código ae, tá funcionando perfeitamente agora. laugh.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...