Foros del Web » Programando para Internet » ASP Clásico »

ISS - Variable.Session

Estas en el tema de ISS - Variable.Session en el foro de ASP Clásico en Foros del Web. Tengo un problema con el obj.Session que tipicamente se usa para que no puedan ingresar a las paginas si no esta logueado. El tema es ...
  #1 (permalink)  
Antiguo 23/01/2006, 20:26
Avatar de horizonte  
Fecha de Ingreso: octubre-2005
Ubicación: A 50cm del Monitor(el angulo depende del estado de animo)
Mensajes: 148
Antigüedad: 18 años, 7 meses
Puntos: 1
ISS - Variable.Session

Tengo un problema con el obj.Session que tipicamente se usa para que no puedan ingresar a las paginas si no esta logueado.
El tema es simple puse como 1er.linea de todas las paginas.asp que estan despues del login.asp lo siguiente:
Código:
<%	
If(Session("usr")<>"1")Then
  Response.Redirect("login.asp")
  Response.End()
End If
%>
y al terminar de cargar la misma pagina.asp(igual para todas las que requieren login):
Código:
<% Session("usr")="1" %>
El tema es que cuando me logueo desde una PC(que no sea la mia), se loguea ok, pero no puede entrar a ninguna pagina, es decir que lo redirecciona automaticamente al "login.asp". Si vuelvo a loguearme SIN CERRAR la ventana del IE, recien ahi puedo entrar a todas las paginas ok.
El error se produce UNICAMENTE si cierro el IE y me vuelvo a loguear, pero a la 2da.vez q'me logueo no hay ningun problema.
Por este motivo que para mi tiene que ver con algo del ISS o del IE, bueno si alguien me puede ayudar o ya paso por un problema similar se lo agradezco me de una idea de que puedo hacer.

Saludos.
__________________
Mientras tanto aqui, en la Gran Ciudad...
Una nueva hora,...Comienza
:Zzz:
  #2 (permalink)  
Antiguo 24/01/2006, 10:56
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
El problema es de lógica. Decís que si la variable session usr es distinto del valor 1, redirija a login.asp y luego de eso (y del Response.End()), le asignás el valor 1... por lo tanto, nunca se lo asignaste realmente y siempre va a entrar en el response.redirect.
la lógica sería esta:

1- página de ingreso de usuario y contraseña
2- página de verificación de datos introducidos
2.1- si los datos son incorrectos, redirigir a login.asp
2.2- si los datos son correctos, asignar variable session con el valor deseado y redirigir a página restringida
3- en PáginaRestringida.asp (y en todas las restringidas), colocar el If(Session("usr")<>"1")Then...
__________________
...___...
  #3 (permalink)  
Antiguo 25/01/2006, 10:27
Avatar de horizonte  
Fecha de Ingreso: octubre-2005
Ubicación: A 50cm del Monitor(el angulo depende del estado de animo)
Mensajes: 148
Antigüedad: 18 años, 7 meses
Puntos: 1
Vamos de vuelta

Veo que no me explique claramente, vamos denuevo:

En TODAS las paginas(salvo login.asp y la que procesa el login con la BD) tengo como 1era linea:
Código:
<%	
If(Session("usr")<>"1")Then
  Response.Redirect("login.asp")
  Response.End()
End If
%>
y como ultima linea(dentro del form), tengo:
Código:
<% Session("usr")="1" %>
Ahora en la pagina del login.asp tengo(luego de hacer la consulta a la BD):
Código:
<%
     while(Not objRS.EOF)
       rows= rows+1
       objRS.MoveNext
     wend
     
     if(rows = 1)Then 
       Session("usr")= "1"
       Response.Redirect("Menu.asp")
     else
%>
     <script language="vbscript">
       msgbox("El Usuario/Contraseña ingresados son incorrectos")
     </script>
<%
       Server.Transfer("login.asp")
     End if
%>
Cierro el RS y Cx
El tema del login no es el problema porque de hecho entro siempre ok, el tema es cuando ingreso a cualquier link del menu, al pasar a otra pagina.asp(la q'abre el link), ahi rebota por la condicion de la variable Session("usr").

La parte +IMPORTANTE viene aca: si NO CIERRO el IE, y me vuelvo a loguear(recordar que al menu.asp entra siempre), recien ahi entro a todas las paginas desde los links del menu. Pero si cierro el IE y vuelvo a intentar pasa el mismo problema.
Aclaro por las dudas que(para ser mas prolijo)al salir(desloguearse)deja la variable Session("usr")="" y tampoco uso cockies, por eso me parece que es algo del ISS, aunque podria llegar a ser algo de los perfiles del NT, ya que en algunas pc no tienen ningun tipo de problema.

Ahora, alguien sabe si hay alguna restriccion del NT que tenga algun tipo de problemas con esto???

Espero haya quedado claro y gracias de antemano,
Saludos.
__________________
Mientras tanto aqui, en la Gran Ciudad...
Una nueva hora,...Comienza
:Zzz:
  #4 (permalink)  
Antiguo 25/01/2006, 10:48
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Veamos si puedo echarte una mano:

Cita:
Iniciado por horizonte
Veo que no me explique claramente, vamos denuevo:

En TODAS las paginas(salvo login.asp y la que procesa el login con la BD) tengo como 1era linea:
Código:
<%	
If(Session("usr")<>"1")Then
  Response.Redirect("login.asp")
  Response.End()
End If
%>
El response.end() esta de mas ya que en cuanto hace el redirect, el sistema termina el solo de cerrar la página ya que es obsoleta.

Cita:
y como ultima linea(dentro del form), tengo:
Código:
<% Session("usr")="1" %>
¿Para qué? Esto no lo entiendo: ¿porque reasignas el valor 1 a la variable global usr en cada página?

Cita:
Ahora en la pagina del login.asp tengo(luego de hacer la consulta a la BD):
Código:
<%
     while(Not objRS.EOF)
       rows= rows+1
       objRS.MoveNext
     wend
     
     if(rows = 1)Then 
       Session("usr")= "1"
       Response.Redirect("Menu.asp")
     else
%>
     <script language="vbscript">
       msgbox("El Usuario/Contraseña ingresados son incorrectos")
     </script>
<%
       Server.Transfer("login.asp")
     End if
%>
Cierro el RS y Cx
¿No es mejor esto:?

Código:
if not objRS.EOF then
     Session("usr") = 1
    ' Server.transfer conserva los recursos del servidor
     server.transfer("menu.asp")
else
%>
<script language="javascript">alert("Usuario/contraseña incorrectos")</script>
' Puedes usar tambien el server.transfer si quieres. Redirect solo es recomendable cuando sales del servidor: http://www.otrodominio.com

<%
    response.redirect("login.asp")
end if

Cita:

La parte +IMPORTANTE viene aca: si NO CIERRO el IE, y me vuelvo a loguear(recordar que al menu.asp entra siempre), recien ahi entro a todas las paginas desde los links del menu. Pero si cierro el IE y vuelvo a intentar pasa el mismo problema.
Aclaro por las dudas que(para ser mas prolijo)al salir(desloguearse)deja la variable Session("usr")="" y tampoco uso cockies, por eso me parece que es algo del ISS, aunque podria llegar a ser algo de los perfiles del NT, ya que en algunas pc no tienen ningun tipo de problema.

Ahora, alguien sabe si hay alguna restriccion del NT que tenga algun tipo de problemas con esto???

Espero haya quedado claro y gracias de antemano,
Saludos.
SIEMPRE que uses Session usas cookies.

Prueba ahora y nos cuentas

Un saludo

Última edición por tammander; 25/01/2006 a las 12:47
  #5 (permalink)  
Antiguo 28/01/2006, 12:02
Avatar de horizonte  
Fecha de Ingreso: octubre-2005
Ubicación: A 50cm del Monitor(el angulo depende del estado de animo)
Mensajes: 148
Antigüedad: 18 años, 7 meses
Puntos: 1
Tammander:

Gracias por la ayuda, hice los cambios pero sigue dando el mismo error.
Cita:
Cita:
y como ultima linea(dentro del form), tengo:

Código:
<% Session("usr")="1" %>

¿Para qué? Esto no lo entiendo: ¿porque reasignas el valor 1 a la variable global usr en cada página?
Eso lo hice justamente por el error que se repite SOLO si cierro el IE(o lo abro por 1ra.vez), luego me logueo(entro al menu.asp) y luego al ingresar a cualquier vinculo(son todos PopUps) del menu me saca como si la variable Session("usr") no hubiese guardado "1" en el login. Pero si vuelvo a loguearme (SIN CERRAR el IE) ahi funciona todo OK. Por eso la idea fue que vuelva a asignar el "1" a la variable del servidor cada vez que carga una pagina, ya que lei que es muy inestable y cada tanto "pierde" el valor.

Conclusion esto solo me pasa con dos perfiles del NT, en el resto funciona todo OK, asi pienso que sera algo de la config del IE. Si logro solucionarlo les cuento.

Saludos.
__________________
Mientras tanto aqui, en la Gran Ciudad...
Una nueva hora,...Comienza
:Zzz:
  #6 (permalink)  
Antiguo 28/01/2006, 14:01
Avatar de tomchat  
Fecha de Ingreso: septiembre-2005
Mensajes: 231
Antigüedad: 18 años, 9 meses
Puntos: 0
Q tal si pruebas esto.

en tu logeo pon este codigo

Session("us")=RS("id_usuario")

en tu pagina de indentificación pon
us=Session("us")
if us="" Then
Response.Redirect "aviso.htm"
elseif us<>"" Then
SQL="Select id_usuario From usuarios Where id_usuario = ' " & us & " ' "
ObjUs=Server.CreateObject("ADODB.COnnection")
'BD Variable de conexion
ObjUs.Open, BD
If ObjUs.Eof Then
Response.Redirect
End If
end if

y en tus paginas usuario incluyes la pagina anteriror.

Espero te sirva
  #7 (permalink)  
Antiguo 30/01/2006, 05:02
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años, 1 mes
Puntos: 0
La semana pasada me encontré con el mismo problema y me quebró muchísimo la cabeza.

Supongo que al final de cada página haces eso de:
<% Session("usr")="1" %>
para asegurar que no se cambie el valor, verdad? No hace falta pero tampoco está de más.

El problema está en el servidor. En mi caso usaba un dominio redirigido que utiliza una frame para que no se vea la ruta real de lo archivos. Desde esa posición no se podía dar valor a la Session porque era como si cada vez comenzara de nuevo, sin embargo, por una extraña razón que no acabo de comprender, cuando reiniciaba sin cerrar el navegador, entonces si que funcionaba correctamente. Al utilizar la ruta correcta, sin usar el dominio redirigido iba perfecto.

Quizás no es exactamente la misma situación pero el error es el mismo.
  #8 (permalink)  
Antiguo 30/01/2006, 06:55
Avatar de horizonte  
Fecha de Ingreso: octubre-2005
Ubicación: A 50cm del Monitor(el angulo depende del estado de animo)
Mensajes: 148
Antigüedad: 18 años, 7 meses
Puntos: 1
Cita:
Iniciado por tomchat
en tu pagina de indentificación pon
us=Session("us")
if us="" Then
Response.Redirect "aviso.htm"
elseif us<>"" Then
SQL="Select id_usuario From usuarios Where id_usuario = ' " & us & " ' "
ObjUs=Server.CreateObject("ADODB.COnnection")
'BD Variable de conexion
ObjUs.Open, BD
If ObjUs.Eof Then
Response.Redirect
End If
end if

y en tus paginas usuario incluyes la pagina anteriror.

Espero te sirva
Si, pero con esto estaria sobrecargando al SQL.Server cada vez que un usuario abre una pagina o la actualiza.
De todas formas te agradezco tu respuesta, por lo que pude averiguar es una combinacion de errores entre el IIS y el IE, aunque para mi es mas un error del IE(y todo su entorno operativo) que del IIS, ya que como habras leido solo me pasa con 2 perfiles del NT, el resto funciona todo OK.

Otro Error que le encontre es que el IE maneja muy mal el concepto de actualizar la pagina, pero buehh... ,no me queda otra.

Saludos.
__________________
Mientras tanto aqui, en la Gran Ciudad...
Una nueva hora,...Comienza
:Zzz:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:48.