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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Arturo Costa Delgado
17/09/2009 - 08:07 | Informe spam
Muchas gracias por la respuesta. La verdad es que tengo la mente como
arcilla y no se como no noté ese detalle tan básico. Una consulta más, si me
permites. ¿Hay alguna forma de poder indicar un target en una sentencia
ASP?. Me refiero a que en vez de que cargue en el mismo iframe haga una
suerte de target="_top" como es en HTML.

Un saludo desde Lima, Perú
ACD

"MEVB" <m.a.n.u.e.l.[AT].a.p.u.r.o.s...c.o.m> escribió en el mensaje de
noticias:
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








__________ Information from ESET NOD32 Antivirus, version of virus
signature database 4432 (20090917) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com






__________ Information from ESET NOD32 Antivirus, version of virus signature database 4432 (20090917) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
Respuesta Responder a este mensaje
#3 MEVB
17/09/2009 - 16:04 | Informe spam
Hola Arturo

Hasta donde se lo que me preguntas no se puede desde ASP.
Solo puedes hacerlo desde HTML o JavaScript en el cliente.
Algo así como...

<script>
function tu_funcion(){
aqui cambias el target
puedes usar window.open(url,target)
}
</script>
</head>
<body onload="tu_funcion();">

Saludos
MV

"Arturo Costa Delgado" escribió en el mensaje
news:
Muchas gracias por la respuesta. La verdad es que tengo la mente como
arcilla y no se como no noté ese detalle tan básico. Una consulta más, si
me permites. ¿Hay alguna forma de poder indicar un target en una sentencia
ASP?. Me refiero a que en vez de que cargue en el mismo iframe haga una
suerte de target="_top" como es en HTML.

Un saludo desde Lima, Perú
ACD

"MEVB" <m.a.n.u.e.l.[AT].a.p.u.r.o.s...c.o.m> escribió en el mensaje de
noticias:
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








__________ Information from ESET NOD32 Antivirus, version of virus
signature database 4432 (20090917) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com






__________ Information from ESET NOD32 Antivirus, version of virus
signature database 4432 (20090917) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida