Un problema bien extraño con sesiones

16/09/2009 - 19:22 por Arturo Costa Delgado | Informe spam
Buenas tardes:
Les cuento, tengo este código:

<%
Select Case Request("val")
Case "cta"IfSession("UsuarioID")="" Then
%>
<script>
parent.location.href="logearse.asp?val=cs";
</script>
<%
End If

Temp1="Select * From Usuarios Where Id=" & Session("UsuarioID")
Tabla1.Open Temp1, Conexion
arrDBData = Tabla1.GetRows()
Tabla1.Close
%>

En teoría debería de ejecutarse el script ANTES de la búsqueda si el
contenido de la variable session esta vacío o ha caducado. Sin embargo
siempre me muestra un error en la línea "Tabla1.Open Temp1, Conexion":

Tipo de error:
Microsoft JET Database Engine (0x80040E14)
Error de sintaxis (falta operador) en la expresión de consulta 'Id='.

Es obvio que se "salta" la sentencia If que controla la ejecución del
script.

He probado inicialmente creando un include

<!-- #include file="sesion.asp" -->

al tope de la página y el contenido de ese archivo es este:

<%
If Session("UsuarioID")="" Then
%>
<script>
parent.location.href="logearse.asp?val=cs";
</script>
<%
End If
%>

y en otras páginas si funciona, pero esta, que se carga en un iframe (que no
creo tenga algo que ver) pues no funciona. Ok, cuando funcione se cargará
toda la página dentro del iframe pero ese es otro detalle. Aquí lo que me
consterna es que no quiere ejecutarse tal cual debe ser.

Probé una forma más que es crear un evento onLoad en el body y que cargue un
script que es el mismo del ejemplo y que esta condicionado al contenido de
la variable session en cuestión. En otra página con iframe funciona, pero en
esta no.

¿Alguien tiene alguna idea de que puede estar pasando?

Muchas gracias por el apoyo
Un saludo desde Lima, Perú
ACD


__________ Information from ESET NOD32 Antivirus, version of virus signature database 4430 (20090916) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
 

Leer las respuestas

#1 MEVB
16/09/2009 - 21:46 | Informe spam
Hola Arturo

Lamentablemente, tu teoría es incorrecta. Entendiste mal el funcionamiento
de ASP.

Primero se ejecuta todo el script de ASP, o lo que es lo mismo, todo aquello
que está dentro de los delimitadores <%...%>. No importa si están al final
del archivo *.asp, siempre se procesan primero que cualquier otro texto
fuera de ellos.

Luego, se envían al explorador web todas las sentencias y tags de HTML,
junto con lo que esta dentro de los tags <script...> y </script> (salvo que
le indiques RUNAT="SERVER"), para que todo ese texto HTML sea procesado por
el explorador o navegador.

Por eso, el error es correcto.

Para corregirlo (o correjirlo?) deberías usar algo como...
<%
response.redirect("logearse.asp?val=cs")
%>

Pues ese codigo si se ejecuta antes que todo lo que le venga debajo.

Existen otros comandos, como son:
Server.Transfer("...")
Server.Execute("...")

Te los dejo a tu criterio si los quieres investigar en internet.

Saludos
MV


"Arturo Costa Delgado" escribió en el mensaje
news:
Buenas tardes:
Les cuento, tengo este código:

<%
Select Case Request("val")
Case "cta"IfSession("UsuarioID")="" Then
%>
<script>
parent.location.href="logearse.asp?val=cs";
</script>
<%
End If

Temp1="Select * From Usuarios Where Id=" & Session("UsuarioID")
Tabla1.Open Temp1, Conexion
arrDBData = Tabla1.GetRows()
Tabla1.Close
%>

En teoría debería de ejecutarse el script ANTES de la búsqueda si el
contenido de la variable session esta vacío o ha caducado. Sin embargo
siempre me muestra un error en la línea "Tabla1.Open Temp1, Conexion":

Tipo de error:
Microsoft JET Database Engine (0x80040E14)
Error de sintaxis (falta operador) en la expresión de consulta 'Id='.

Es obvio que se "salta" la sentencia If que controla la ejecución del
script.

He probado inicialmente creando un include

<!-- #include file="sesion.asp" -->

al tope de la página y el contenido de ese archivo es este:

<%
If Session("UsuarioID")="" Then
%>
<script>
parent.location.href="logearse.asp?val=cs";
</script>
<%
End If
%>

y en otras páginas si funciona, pero esta, que se carga en un iframe (que
no creo tenga algo que ver) pues no funciona. Ok, cuando funcione se
cargará toda la página dentro del iframe pero ese es otro detalle. Aquí lo
que me consterna es que no quiere ejecutarse tal cual debe ser.

Probé una forma más que es crear un evento onLoad en el body y que cargue
un script que es el mismo del ejemplo y que esta condicionado al contenido
de la variable session en cuestión. En otra página con iframe funciona,
pero en esta no.

¿Alguien tiene alguna idea de que puede estar pasando?

Muchas gracias por el apoyo
Un saludo desde Lima, Perú
ACD

__________ Information from ESET NOD32 Antivirus, version of virus
signature database 4430 (20090916) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com



Preguntas similares