Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael S. S.

Problemas com cookies

Recommended Posts

Boa tarde amigos

 

Fiz um sistema de login com cookies para restrição de páginas que só podem ser exibidas se o usuário estiver logado no sistema, porém estou tendo problemas com ele.

 

Acontece que após logar pela primeira vez no sistema ele abre a página inicial, que é restrita a usuários, mas ao clicar em qualquer menu, indo para outra página também restrita, ele retorna para a página de login como se o usuário não estivesse mais logado, ai então logando novamente isso não acontece mais e consigo acessar as páginas normalmente.

Geralmente após fazer isso (logar duas vezes) mesmo depois de sair do sistema clicando em logout o sistema funciona normalmente, logando novamente ele não da mais erros, geralmente é só na primeira vez após abrir o site que isso acontece e não é sempre, é meio esporádico.

 

Segue abaixo o código da página de login

 

<%
response.buffer = true

logado = Request.Cookies("login").item("acessologado")
if  logado = "true" then
response.Redirect("admin.asp")
response.End()
end if
url=request.QueryString("url")
IF request.ServerVariables("REQUEST_METHOD")="POST" THEN
'OBTENDO DADOS----------------------------------------------------------------------------
login=request.Form("login")
senha=request.Form("password")

'CONEXÃO----------------------------------------------------------------------------------
OpenConnection

'LOCALIZANDO USUÁRIO----------------------------------------------------------------------
textosql = "SELECT * FROM sis_login WHERE login='"&login&"'"
Set recl = conexao.Execute(textosql)

'AUTENTICANDO E CRIANDO COOKIES-----------------------------------------------------------
IF recl.EOF THEN 'se o usuário não foi localizado
 mensagem = "Usuário não localizado ou senha inválida."
ELSE 'se localizou um usuário
 IF Strcomp(login,recl("login"),1)=0 AND senha = recl("senha") THEN 'Comparando usuário e senha
  Response.Cookies("login").item("acessologado") = "true"
  Response.Cookies("login").item("login")  = login
  Response.Cookies("login").item("LoginId") = recl("id")

  id_usuario = recl("id_usuario")
  textosql = "SELECT * FROM sis_usuarios WHERE id='"& id_usuario &"'"
  Set recU = conexao.Execute(textosql)

  Response.Cookies("usuario").item("UserId") = recU("id")
  Response.Cookies("usuario").item("UserName")  = recU("nome")
  Response.Cookies("usuario").item("Email") = recU("email")
  Response.Cookies("usuario").item("Privilegio") = recU("privilegio")

  IF request.Form("manter")="manter" THEN
   Response.Cookies("login").Expires = date + 7
   Response.Cookies("usuario").Expires = date + 7
  END IF

  'GRAVANDO LOG---------------------------------------------------------------------
  data = DataAmericano(date)
  hora = time

  sqlLogs = "INSERT INTO sis_logs (host, ip, data, hora, id_usuario,tipo) values ('"&Request.ServerVariables("REMOTE_HOST")&"','"&request.ServerVariables("REMOTE_ADDR")&"','"&data&"','"&hora&"','"&session("UserId")&"','1')"
  Set recLogs = conexao.Execute(sqlLogs)

  'ENCERRANDO CONECXÕES E REDIRECIONANDO---------------------------------------------
  set recLogs=nothing
  recU.close
  set recU=nothing
  set recLogs=nothing
  CloseConnection

  IF url="" THEN
   response.Redirect("admin.asp") 'redireciona para o sistem
   response.End()
  ELSE
   response.Redirect(url) 'redireciona para a última página visitada
   response.End()
  END IF

 ELSE 'Se não coincidir usuário e senha
  mensagem = "Usuário não localizado ou senha inválida."
 END IF
END IF 'Fim localizar usuário
END IF 'Fim envio do form
%>

 

 

Na primeira parte do código verifico se o usuário já está logado, e se estiver, direciono direto para a página inicial do sistema, caso contrário exibo o formulário de login. Após enviar o formulário verifico os dados no banco localizando o usuário e comparando a senha, e uma vez confirmado os dados são criados os cookies, salvo no banco de dados os dados do login efetuado no sistema e direciono para a página inicial ou a página que o usuário estava tentando acessar que recebo na variável url.

 

Abaixo o código da validação feita em todas as páginas restritas ao usuário:

 

'Restringe uma página
Function Restrito()
If Request.Cookies("login").item("acessologado") <> "true" then
 'Monta url da página
 dim s
 s = "http://"
 s = s & Request.ServerVariables("HTTP_HOST")
 ss = s & Request.ServerVariables("URL")
 if Request.QueryString.Count > 0 THEN
  ss = ss & "?" & Request.QueryString
 end if
 'Redireciona para a página de login
 Response.Redirect "http://"&Request.ServerVariables("SERVER_NAME")&"/admin/default.asp?url=" &Server.URLEncode(ss)
End if
end function

 

Se alguem puder me ajudar com este erro agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

expire os dados, e é melhor trabalhar com session, você tem mais controle

Compartilhar este post


Link para o post
Compartilhar em outros sites

expire os dados, e é melhor trabalhar com session, você tem mais controle

 

Desculpe amigo mas não entendi o que quis dizer com "expire os dados" ??

 

Com session eu tenho o problema de que ela expira a cada 20 minutos, e não consegui alterar este tempo por meio de script, das diversas formas que encontrei na internet nenhuma funcionou. Além disto, com session eu não tenho a opção de manter o usuário logado após fechar a página, o que é muito útil para este sistema.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo de cookies que usam em um dos sites

para expirar os dados use response.cookies("nome do seu cookie").Expires=date+numero de dias

 

   <%
set bc=server.createobject("MSWC.BrowserType")
	Data = now
if  bc.cookies = FALSE then
			response.write("<script>novajan2();</script>")
else
		if request.cookies("meucook")("ultimavisita") <> "" then 
			response.write request.cookies("meucook")("ultimavisita") 
			response.cookies("meucook")("ultimavisita")=formatdatetime (data,1)
			response.cookies("meucook").Expires=date+365
		else
			Response.write("Essa é sua primeira visita")
			response.cookies("meucook").Expires=date+365
			Response.Cookies("meucook")("ultimavisita") =  formatdatetime (data,1)
		end if
end if %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo de cookies que usam em um dos sites

para expirar os dados use response.cookies("nome do seu cookie").Expires=date+numero de dias

 

   <%
set bc=server.createobject("MSWC.BrowserType")
	Data = now
if  bc.cookies = FALSE then
			response.write("<script>novajan2();</script>")
else
		if request.cookies("meucook")("ultimavisita") <> "" then 
			response.write request.cookies("meucook")("ultimavisita") 
			response.cookies("meucook")("ultimavisita")=formatdatetime (data,1)
			response.cookies("meucook").Expires=date+365
		else
			Response.write("Essa é sua primeira visita")
			response.cookies("meucook").Expires=date+365
			Response.Cookies("meucook")("ultimavisita") =  formatdatetime (data,1)
		end if
end if %>

 

Mas como isso poderia ajudar no meu problema?? por padrão os cookies expiram quando a session é encerrada, ou no meu caso quando o cliente seleciona "Manter logado" eu já faço isso que você indicou, colocando a data de expiração para 7 dias após a data atual. Mas de qualquer forma ele continua com este erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dae você aumenta a data de expiração de7 dias para uma data bem maior

Compartilhar este post


Link para o post
Compartilhar em outros sites

dae você aumenta a data de expiração de7 dias para uma data bem maior

 

Amigo, obrigado por tentar ajudar mas acredito que você não entendeu. Não importa qual data de expiração eu defina para os cookies, ele deveria logar e dar acesso as páginas até que a sessao seja encerrada (navegador seja fechado) ou até a data que eu definir. Porém, o que acontece é que logo após logar, se o usuário clicar em qualquer link para uma página restrita ele volta a solicitar login como se o usuário não tivesse logado. (somente no primeiro acesso após abrir o navegador). O mais estranho é que a págia que abre logo após o login (admin.asp) também é restrita e verifica se o usuário está logado, e nesta página não da erro. Somente após clicar em um link para uma outra página é que o sistema não identifica que o usuário está logado e volta a solicitar login.

 

Mais alguem teria alguma sugestão??

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que eu coloquei acima é para você ver se esta adicionando a informação ao cookie ja existente de maneura correta, mas abaixo um exemplo de login com cookie. E aconselho você fazer login via bd, é mais seguro e gerenciável

 

<% Response.Buffer = True 'Buffers the content so Response.Redirect will work
Session("BlnAdministrator")=false 'Set our session object to false
'set the username and password
sUsername="codefixer"
sPassword="codefixer"
%>
<html>
<head>
<title>Cookie Login Script</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<%
'if form has not been filled in then display it otherwise check the details submitted
If Request.Form<>"" Then
If Request.form("checkbox") ="1" Then
Response.Cookies("UsernameCookie") = Request.Form("txtUsername")
Response.Cookies("PasswordCookie") = Request.Form("txtPassword")
Response.Cookies("RememberMeCookie") = "1"
Response.Cookies("UsernameCookie").expires = Now() + 60
Response.Cookies("PasswordCookie").expires = Now() + 60
Response.Cookies("RememberMeCookie").expires = Now() + 60
Else
Response.Cookies("RememberMeCookie") = ""
Response.Cookies("UsernameCookie") = ""
Response.Cookies("PasswordCookie") = ""
End If
'=== call checklogin subroutine
CheckLoginForm
Else
'=== call showlogin subroutine
ShowLoginForm
End If
'=== begin subroutine showlogin
Sub ShowLoginForm
%>
<div align="center"> <br>
<form name="form1" action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="post">
<table width="50%" border="1" align="center" cellpadding="4" cellspacing="0" bordercolor="#6185C1" bgcolor="EEF3FB">
<tr>
<td height="112" valign="top">
<table width='100%' border="0" cellpadding="3">
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td width="45%">Username : </td>
<td width="54%"> <input value="<%= Request.Cookies("UsernameCookie") %>" name="txtUsername" type="text">
</td>
</tr>
<tr>
<td width="45%">Password : </td>
<td width="54%"> <input value="<%= Request.Cookies("PasswordCookie") %>" name="txtPassword" type="password">
</td>
</tr>
<tr>
<td width="45%"> </td>
<td width="54%"> <input type="submit" value="Login" name="submit">
</td>
</tr>
<tr>
<td>Remember me</td>
<td><input value="1" type="checkbox" name="checkbox"
<% If Request.Cookies("RememberMeCookie") = "1" Then
Response.Write "CHECKED"
Else
Response.Write ""
End If %>>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</div>

<%
'=== end showloginform subroutine
End Sub

'===begin subroutine checkloginform
Sub CheckLoginForm
txtUsername=Request.Form("txtUsername")
txtPassword=Request.Form("txtPassword")
'simple/basic protection against SQL injection use of the apostrophe
If InStr(1,txtUsername,"'",1) > 0 and InStr(1,txtPassword,"'",1) > 0 then
response.redirect "Login.asp"
Else
'check to see if the form details filled in match 'username' and 'password' above
If txtUsername = sUsername AND txtPassword = sPassword Then
'if the correct login details are filled in then set up a Session Object and redirect
'visitor to admin page
Session("BlnAdministrator") = True
Response.Redirect "admin.asp" 'set page you want to direct to on successful login
Else
'if the correct details aren't filled in then show the subroutine showloginform again
'and the statement below
ShowLoginForm
response.write "<div align='center'>Your login failed.</div>"
End If
End If
End Sub
'=== end subroutine checkloginform
%>
</body>
</html>

 

Admin.asp

 

<% If Session("BlnAdministrator") <> True Then
Response.Redirect("login.asp")
End If
%>
<html>
<head>
<title>Cookie Login Script</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<div align='center'>Successful login and your username & password will be remembered if you clicked 'remember me' on login.</div>
</body>
</html> 

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.