Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro D.

[Resolvido] Session

Recommended Posts

Olá pessoal!

 

Eu tenho um sistema de login com Session e em cada página eu tenho a parte que

verifica se o usuário está logado.

 

<%
If NOT Session("logado")=true Then
Session("opcao")=2
Response.redirect("../default.asp")
Response.End
End If
%>

O sistema funciona, mas tenho duas dúvidas que eu queria solucionar.

 

1. Como eu defino o tempo que expira a Session? Eu vi em algum lugar no fórum que

a Session tem um tempo pré-determinado para expirar. Como posso estipular um tempo maior.

 

2. Como posso limitar o login do usuário? Tipo assim, eu faço login na minha máquina

e se eu for em outra máquina da rede eu consigo fazer login também. Eu queria que não

acontecesse isto. Eu pensei em colocar, no momento em que o usuário faz o login, um

UPDATE para atualizar no banco de dados na coluna logado o valor sim. E ná página

que efetua o logout o UPDATE atualiza para não. Assim ao entrar com a senha e nome,

a página procura no banco de dados desde que a opção logado seja não. Veja o exemplo

da página que procura o usuário desde que logado seja não.

 

Dim user, pass, filePath, objConn, objRS, situacao
user=Request.QueryString("user")
pass=Request.QueryString("senha")
situacao="não"
filePath=Server.MapPath("../Dados/banco_dados.mdb")
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath
Set objRS=Server.CreateObject("ADODB.Recordset")
Set objRS=objConn.Execute("SELECT * FROM usuarios WHERE nome_user='"&user&"' AND senha='"&pass&"' AND logado='"&situacao&"'")

Gostaria de saber se existe outra forma.

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

use assim para expirar a session e apagar seu conteudo

response.expires = 0
response.expiresabsolute = Now() -1
response.addHeader "pragma","no-cache"
response.addHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session.Contents.RemoveAll()
Session.Abandon

Compartilhar este post


Link para o post
Compartilhar em outros sites

use assim para expirar a session e apagar seu conteudo

response.expires = 0
response.expiresabsolute = Now() -1
response.addHeader "pragma","no-cache"
response.addHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session.Contents.RemoveAll()
Session.Abandon

E aí xanburzum, chovendo muito em Pira hoje?

 

Este código que você postou serve para destruir as Sessions e seu conteúdo, não é!? O que eu quero e aumentar o tempo para a Session expirar automaticamente ou fazer com que a Session não expire até o usuário fazer logout. Hoje se eu faço login e deixo a tela principal do usuário aberta por um tempo (não marquei o tempo, tipo depois de 5 minutos eu acho) e depois tento abrir outra página ASP, dá erro de login e redireciona para a página default, isso porque a Session("logado") que eu indiquei no código abaixo expirou, ou seja não é mais true. Eu uso este código para verificar se o usuário está logado nas páginas restritas.

 

<%
If NOT Session("logado")=true Then
Session("opcao")=2
Response.redirect("../default.asp")
Response.End
End If

 

Eu me lembro vagamente de uma opção Session.Timeout (eu acho que é assim), mas como eu utilizo?

Referente ao caso de restringir o login do usuário você tem alguma idéia melhor ou a que eu falei sobre update em banco de dados quebra o galho?!

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

para aumentar a session

é sim ples

Session.Timeout = 120 
'onde 120 é o numero de minutos

'para abandonar uma session

Response.Buffer = true
Session.Abandon

'se voce quiser abandonar apenas uma session basta por o nome da session

session.Abandon("nome")

'quanto ao login faz usando o ip da maquina 

session("ip") = Request.ServerVariables("REMOTE_ADDR")

'ai nas suas condições voce implementa

IF session("ip") = Request.ServerVariables("REMOTE_ADDR") Then

'ta logado

End IF

Compartilhar este post


Link para o post
Compartilhar em outros sites

para aumentar a session

é sim ples

Session.Timeout = 120 
'onde 120 é o numero de minutos

'para abandonar uma session

Response.Buffer = true
Session.Abandon

'se voce quiser abandonar apenas uma session basta por o nome da session

session.Abandon("nome")

'quanto ao login faz usando o ip da maquina 

session("ip") = Request.ServerVariables("REMOTE_ADDR")

'ai nas suas condições voce implementa

IF session("ip") = Request.ServerVariables("REMOTE_ADDR") Then

'ta logado

End IF

 

Anderson, o sistema que eu estou montando é para trabalhar em rede. Este Request.ServerVariables("REMOTE_ADDR") pega o ip da máquina onde foi logado, certo. Tipo, eu me logo na máquina IP 192.168.0.158, se eu for na máquina com outro ip, tipo 192.168.0.163 e entrar com o mesmo login, não vai logar do mesmo jeito já que o ip é diferente?!

 

Referente ao Session.Timeout tem como indicar para nunca expirar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o ip é isso ai mesmo .. ele pega da maquina ...

ai voce guarda em uma tabela de log .. o ip data id do usuario ..

 

e depois vai comparando na hora de logar ...

(quanto ao Session )

 

entao cara no iis o maximo é 24 horas.

 

se voce por no timeout é 1440 o maximo que aguenta.

 

eu sempre uso session e cokkies..

 

porque cookie o cara só perde se excluir pelo navegador ou indo direto na pasta de cookies.

 

ai eu uso os dois .. porque tem gente que desabilita as cokkies.

 

se um nao pega o outro ja pega ..

mais o maximo pra confiar mesmo .. é 24 horas

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente usar o Request.ServerVariables("HTTP_X_FORWARDED_FOR")

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente usar o Request.ServerVariables("HTTP_X_FORWARDED_FOR")

 

xanburzum, como utiliza este HTTP_X_FORWARDED_FOR? você tem algum exemplo? Eu tentei fazer um Response.write Request.ServerVariables("HTTP_X_FORWARDED_FOR") e não apareceu nada na tela.

 

Eu fiz um Response.write Request.ServerVariables("REMOTE_ADDR") como indicado pelo Anderson na minha máquina e retornou um IP diferente do que eu utilizo na rede (status da rede), digitei este ip na barra de endereço do browser para acessar os sistema (http://ip_diferente/Intranet), ele entra, mas notei que fica lento em comparação com o ip que aparece no status de rede. Algumas imagens nem carregam. Porque será?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se voce usar ServerVariables("REMOTE_ADDR") em uma rede mais acessando externo ele vai retornar o ip principal nao oo ip de rede .. agora se voce rodar o sistema em um windows server na sua rede

ex: ip xxxxxxxxxxxx

e o seu ip de rede for 192.168.0.10

ele vai retornar 192.168.0.10

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não pode utilizar o Global.asa? acho que resolveria seu problema em questão de controlar o seu sistema.

 

Leandro D. , Pra pegar o ip de rede. basta utilizar o codigo abaixo.

 

  Request.ServerVariables("REMOTE_HOST")
  ou
  Request.ServerVariables("REMOTE_ADDR")

 

Abs, qualquer coisa grita!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí galera! Eu resolvi em partes com a idéia que falei no começo, adicionei uma coluna chamada logado na tabela usuarios e quando o usuário loga, adiciona o valor sim, se eu tento logar novamente em outra máquina não vai, só se eu fizer logout para retornar o valor não, porém tem um problema, se o usuário fechar o browser sem clicar no botão logout (coisa que muita gente aqui faz rsrsrs) o valor sim vai ficar no bd e se ele tentar logar novamente vai dar erro. Eu gostaria de saber como usar o global.asa que o csdigo falou, como eu disse uma vez para o xanburzum aqui no fórum, sei muito pouco de ASP e estou usando o fórum para aprender mais, se alguém puder me orientar sobre como aplicar o global.asa eu agradeço, se eu não me engano, dá até para fazer um esquema de usuários online com este global.asa. fico no aguardo de uma orientação!

 

Alguém tem alguma idéia como posso usar o global.asa para resolver está questão? Preciso de um exemplo ou uma orientação didática.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém tem alguma idéia como posso usar o global.asa para resolver está questão? Preciso de um exemplo ou uma orientação didática.

 

Referente ao global.asa eu mal mexo nele. Não sei muito... mas na questão de permanecer logado o usuário voce pode usar a ideia que foi dita la em cima, dos cookies.

 

Assim quando o usuario fechar o navegador sem se deslogar, qdo abrir novamente ainda estará logado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém tem alguma idéia como posso usar o global.asa para resolver está questão? Preciso de um exemplo ou uma orientação didática.

 

Referente ao global.asa eu mal mexo nele. Não sei muito... mas na questão de permanecer logado o usuário voce pode usar a ideia que foi dita la em cima, dos cookies.

 

Assim quando o usuario fechar o navegador sem se deslogar, qdo abrir novamente ainda estará logado.

 

Na verdade eu não quero que o usuário fique logado quando fechar e abrir o navegador. O que ocorria é que a Session terminava muito rápido, isto eu resolvi com o Session.Timeout. O que eu quero é limitar o login da mesma pessoa em máquinas diferentes ao mesmo tempo. Como eu disse, eu fiz um sistema com update no bd, mas aqui o pessoal tem a mania de fechar o navegador sem fazer logout, aí o bd não é atualizado para offline. Aí quando tenta logar novamente da erro falando que ta logado, aí tem que entrar no bd e atualizar manualmente. Queria uma solução para isso, mas sem usar bd, pois re-acostumar as pessoas é difícil.

 

Bom dia pessoal! Alguém tem alguma idéia para me passar? :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Na verdade eu não quero que o usuário fique logado quando fechar e abrir o navegador. O que ocorria é que a Session terminava muito rápido, isto eu resolvi com o Session.Timeout. O que eu quero é limitar o login da mesma pessoa em máquinas diferentes ao mesmo tempo. Como eu disse, eu fiz um sistema com update no bd, mas aqui o pessoal tem a mania de fechar o navegador sem fazer logout, aí o bd não é atualizado para offline. Aí quando tenta logar novamente da erro falando que ta logado, aí tem que entrar no bd e atualizar manualmente. Queria uma solução para isso, mas sem usar bd, pois re-acostumar as pessoas é difícil.

 

Bom dia pessoal! Alguém tem alguma idéia para me passar? :mellow:

 

Bom, veja só, você está numa sinuca meio complicada.

 

A session pode expirar dentro de um valor pre-determinado do servidor, ou pode ter seu tempo alterado via global.asa (que é um arquivo onde determinamos algumas variaveis globais para o funcionamento de todo o sistema) ou via o timeout como você o fez.

 

Isso é algo que é determinado no servidor, então, enquanto esse limite de tempo da session não for atingido, ele vai constar com ativo, por isso se eu fechar o navegador, reabri-lo dentro desse tempo, tenho acesso ao sistema mesmo sem ter feito novo login.

 

Como mudar a cultura do usuário, é um trabalho que as vezes nos faz sentir como o Padre José de Anchieta, é melhor pensar em alternativas:

Uma delas seria criar um cookie que seria criado quando o usuário entra no sistema, e se fizer o logout do modo certo, ele é destruido ou tem seu valor alterado, bem como a session seria destruida também.

Mas se não deslogar como esperado, fechando o navegador por exemplo, ao tentar novo login, o sistema verifica a existencia desse cookie ou o seu valor, e existindo ele ou o valor, uma nova sessão é criada, caso contrario exibe-se uma mensagem qualquer.

 

Voce pode usar o Server.Variables e pegar o nome da maquina que acessou o sistema e associa-la ao login no bd, e comparar o valor registrado ao atual, se forem iguais, libera-se o sistema para o usuário, ou se for diferente, invalida-se a ultima sessão e autoriza-se a nova sessão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este sistema, se o user quiser logar duas vezes na mesma máquina ele não permite por estar logado 1º vez, você até pode implementar ele usando banco de dadosm, para se tentar llogar em outra maquina, tipo o msn

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veio uma dúvida na cabeça e gostaria de saber. Há como colocar uma mensagem ao clicar no botão fechar do navegador. Tipo, o usuário clica e aparece uma caixa tipo alert. Referente a restrição de login em máquinas diferentes irei usar o método de atualização de banco de dados mesmo. Agradeço as orientações de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desconheço uma solução desse tipo, mas se existir, seria provavelmente em javascript.

 

O que poderia fazer, é colocar um aviso para sempre deslogarem do sistema da maneira certa logo que o usuário loga no sistema, usando uma daquelas janelas modais feitas em jquery

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desconheço uma solução desse tipo, mas se existir, seria provavelmente em javascript.

 

O que poderia fazer, é colocar um aviso para sempre deslogarem do sistema da maneira certa logo que o usuário loga no sistema, usando uma daquelas janelas modais feitas em jquery

Vinicius, eu achei em javascript com a opção OnBeforeUnload, mas não é muito bom, pois ela não trata só o botão fechar em si, qualquer link que eu clique para abrir outra página exibi a mensagem. Vou deixar sem este java e colocar algum aviso na tela mesmo para os usuários ficarem alertas. Vou criar uma div como se fosse uma caixa de aviso e usar o jquery para dar um fade in quando a página inicial é aberta. Pode dar o tópico como RESOLVIDO.

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.