Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/03/2011, 14:01
Avatar de Julcar
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"