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

Curioso Problema con Sesiones y Navegadores

Estas en el tema de Curioso Problema con Sesiones y Navegadores en el foro de ASP Clásico en Foros del Web. Bien, estoy cada vez mas cerca de lograr lo que busco, pero ahora tengo un problema entre navegadores y cómo manejan las sesiones, tengo los ...
  #1 (permalink)  
Antiguo 22/03/2011, 14:01
Avatar de Julcar  
Fecha de Ingreso: noviembre-2007
Ubicación: C:\inetpub\wwwroot\Guayaquil
Mensajes: 1.507
Antigüedad: 17 años
Puntos: 54
Curioso Problema con Sesiones y Navegadores

Bien, estoy cada vez mas cerca de lograr lo que busco, pero ahora tengo un problema entre navegadores y cómo manejan las sesiones, tengo los siguientes archivos:

default.asp
Código ASP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.   <head>
  5.     <title>ASPBlog</title>
  6.     <meta http-equiv="Content-Type" content="text/xml;charset=iso-8859-1"/>
  7.     <meta http-equiv="pragma" content="no-cache">
  8.   </head>
  9.   <body>
  10.     <div id="global">
  11.       <&#37; Session("antihack") = True %>
  12.       <h4>Este frame carga la pagina protegida correctamente y crea un candado abandonando la sesion</h4>
  13.       <object id="frame" data="pagina-protegida.asp?i=1" type="text/html" width="500" height="300" border="0"></object>
  14.       <br/>
  15.       <hr/>
  16.       <br/>
  17.       <h4>Al volver a cargar la pagina protegida el candado evita que se acceda</h4>
  18.       <object id="frame2" data="pagina-protegida.asp?i=1" type="text/html" width="500" height="100" border="0"></object>
  19.     </div>
  20.   </body>
  21. </html>

pagina-protegida.asp
Código ASP:
Ver original
  1. <%
  2. Response.addHeader "pragma", "no-cache"
  3. Response.CacheControl = "Private"
  4.  
  5. Dim referer
  6. referer = Replace(Request.ServerVariables("HTTP_REFERER"),"www.","")
  7.  
  8. 'Verifico si trae parametros por url
  9. If Request.Querystring("i") = "1" Then
  10.   'Esta pidiendo el iframe, verifico si la sesion antihack existe
  11.   If session("antihack") = True Then
  12.     'La sesion existe, esta accediendo desde el frame principal
  13.     %>
  14.       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  15.       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  16.       <html xmlns="http://www.w3.org/1999/xhtml">
  17.         <head>
  18.           <meta http-equiv="pragma" content="no-cache">
  19.         </head>
  20.         <body>
  21.           <iframe src="pagina-protegida.asp" width="500" height="300" frameborder="0" scrolling="no"></iframe>
  22.         </body>
  23.       </html>
  24.     <%
  25.     'Elimino la sesion, asi creo un candado
  26.     session("antihack") = False
  27.     session.abandon
  28.   Else
  29.     'La sesion no existe, esta tratando de acceder directamente
  30.     %>
  31.     <h3 style="color:red">Error, peticion no autorizada...</h3>
  32.     <%
  33.   End If
  34. Else
  35.   'No esta pidiendo iframe, verifico referer
  36.   If InSTR(Referer,"http://aspblog.in") = 1 Then
  37.     'el referer es del dominio correcto, doy acceso
  38.     %>
  39.       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  40.       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  41.       <html xmlns="http://www.w3.org/1999/xhtml">
  42.         <head>
  43.           <meta http-equiv="pragma" content="no-cache">
  44.         </head>
  45.         <body>
  46.           <div>Esta pagina tiene el codigo que quiero proteger</div>
  47.         </body>
  48.       </html>
  49.     <%
  50.   Else If Not InSTR(Referer,"http://aspblog.in") = 1 Then
  51.     Response.Redirect("/")
  52.     End If
  53.   End If
  54. End If
  55. %>

Se supone que esto trabaja así

Si ingresas a default.asp, el primer frame diria "Esta pagina tiene el codigo que quiero proteger" mientras que el segundo frame tendria un mensaje en rojo que advierte "Error, peticion no autorizada..."

Si ingresas a pagina-protegida.asp deberia redireccionar a default.asp sin dar algun aviso

Si ingresas a pagina-protegida?i=1 es decir con querystring, tal como lo pido en ambos ObjectTag de default.asp, deberia aparecerte el mensaje de error.

El algoritmo funciona en Chrome y Firefox 3 según el plan.

Pero el problema está en Opera 11 y Explorer 8

En opera 11 ambos frames en default.asp muestran el codigo correcto
En Internet explorer 8, si recargas varias veces la página, en ciertas ocasiones muestra el codigo de error en ambos frames...

¿Alguien sabe cómo puedo solucionar esto?
__________________
Linux no es el único S.O. libre, conoce a ReactOS el Windows Libre!
"Si mis respuestas te dan la calma, espárceme un poco de karma"
  #2 (permalink)  
Antiguo 22/03/2011, 18:59
Avatar de Julcar  
Fecha de Ingreso: noviembre-2007
Ubicación: C:\inetpub\wwwroot\Guayaquil
Mensajes: 1.507
Antigüedad: 17 años
Puntos: 54
Respuesta: Curioso Problema con Sesiones y Navegadores

Bien antes que nada ya tengo el 50% de la solucion, y es gracias al usuario Wasper que me ha ayudado con esto al darme una clave muy importante:

Los navegadores trabajan los frames de forma distinta

Qué significa esto: que mientras Chrome y Firefox cargan de forma cronológica (creo que se dice así) los elementos de cada página (por eso es que funciona) Opera carga los frames simultáneamente (por eso el session.abandon no funca) y el Explorer 8 carga los frames antes que la página que los contiene, por eso el error en ambos frames, la sesion se iniciaba cuando los frames ya estaban cargados.

Ahora lo unico que debo hacer es retrasar la carga de los frames en Opera y Explorer a fin de que todo funcione correctamente. Ya les pasaré el codigo final.
__________________
Linux no es el único S.O. libre, conoce a ReactOS el Windows Libre!
"Si mis respuestas te dan la calma, espárceme un poco de karma"
  #3 (permalink)  
Antiguo 23/03/2011, 00:11
Avatar de Julcar  
Fecha de Ingreso: noviembre-2007
Ubicación: C:\inetpub\wwwroot\Guayaquil
Mensajes: 1.507
Antigüedad: 17 años
Puntos: 54
Respuesta: Curioso Problema con Sesiones y Navegadores

Y bueno, al final lo resolví de la siguiente forma:

*creando los frames de default.asp mediante javascript, y....
*usando la funcion de javascript setTimeout() retraso la salida del segundo iframe 2-3 segs para que así no hayan problemas con el session.abandon

El resultado es una seguridad muy buena y casi impenetrable. Agradezco mucho a u_goldman y a wasper, sin sus ayudas no hubiera podido superar este gran obstáculo.
__________________
Linux no es el único S.O. libre, conoce a ReactOS el Windows Libre!
"Si mis respuestas te dan la calma, espárceme un poco de karma"

Etiquetas: navegadores, sesiones
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 12:12.