sobre el objeto session

06/10/2005 - 19:35 por Enrique | Informe spam
hola a todos,

tengo un problema de eliminacion de datos cuando salgo de la sesion
(session_onend del global.asa). el caso es que dentro de mi
"DELETE...WHERE", la condicion no me funciona use lo que use (sea
session("sessionID") o session.sessionID). el campo sessionID de mi tabla
temporal es de tipo texto, asi que para provocar el error, no le pongo las
comillas simples, pero nada que hacer, no se provoca ningun tipo de error ni
se eliminan los datos.

eso me hace suponer que el programa no pasa por ahi al salir (lo que me
sorprendre porque creo que en teoria es lo que deberia hacer). pero me hace
dudar sobre mi entendimientode la session.

asi que les dire lo que me parece a ver si estoy en lo cierto:
* el objeto session se crea cada vez que un usuario se conecta a nuestro
sitio web
* cada objeto session tiene un sessionID que identifica de forma unica a
cada usuario (como un clave primaria digamos)

* la session muere o cuando pasan el tiempo maximo estipulado (20mn por
defecto pero modificable) o cuando se cierra de forma explicita la pagina
web (puede ser porque lo quiere asi el usuario o por cualquier problema de
tipo hardware, software, corte de luz)

¿estoy en lo cierto? ¿algo se me escapa? ¿porque no me funciona la
eliminacion de los datos en la tabla temporal? ¿se ejecuta el codigo o no?
¿si no se ejecuta porque? ¿como podria hacer para que funcionara? dicho de
otra forma, ¿donde deberia colocar mi codigo para que funcione esta
eliminacion?, ¿seria posible hacer esta eliminacion en el "session_onstart"
en vez del "session_onend"? ¿daria problemas cuando hay mas de un usuario
conectado a la vez?. en este caso, no se trataria de eliminar los datos de
nuestro sessionID sino todos los datos de la tabla temporal, lo que quiza
podria afectar a otros sessionID que estan activos (usuarios conectados).

otra cosa: ¿existe una diferencia entre cerrar una pagina y hacer un logout?
¿como se hace un logout?
 

Leer las respuestas

#1 Manuel Vera
06/10/2005 - 20:02 | Informe spam
Te explico...

1.- La Session (el objeto) solo funciona si, y solo si, el cliente web o
navegador tiene las cookies habilitadas.

2.- Cada cliente web que entra a tu sitio abre una nueva Session, siempre
que tenga las cookies activadas. Si no las tiene activas, la session se
genera con cada visita a cada página.

3.- El OnEnd() del global.asa únicamente se ejecuta cuando:
manualmente)
salir a traves de:
Session.Abandon()
y luego el Application_OnEnd

4.- En cuanto a forzar el error de SQL no sucede pues:
es igual que
esto se debe a que el motor SQL es "inteligente" y hace la conversión
necesaria en el tipo de datos.

5.- Lo que no estoy seguro es que el Session.SessionID se conserve cuando
entras al Session_OnEnd. De no conservarse el valor inicial entonces allí
está la causa del porque no puedes borrar los datos, pues el ID ya no es el
mismo. Prueba con el siguiente código que te ayudará a depurar:
sub Session_OnEnd()
... tu codigo ...
'aqui lo que haces es grabar un archivo de texto con la sentencia de
DELETE para que verifiques si el Session.SessionID está trayendo el valor
real a borrar.
call grabarMsg(SQL_DELETE)
...tu codigo...
end sub
function grabarMsg(texto)
dim fs, ruta, f
Set fs = CreateObject("Scripting.FileSystemObject")
ruta = "c:\msg" & cdbl(now) & ".txt"
Set f = fs.CreateTextFile(ruta, true, false)
f.write texto
f.Close
set f = nothing
set fs = nothing
end function

Salu2
MV


"Enrique" wrote in message
news:
hola a todos,

tengo un problema de eliminacion de datos cuando salgo de la sesion
(session_onend del global.asa). el caso es que dentro de mi
"DELETE...WHERE", la condicion no me funciona use lo que use (sea
session("sessionID") o session.sessionID). el campo sessionID de mi tabla
temporal es de tipo texto, asi que para provocar el error, no le pongo las
comillas simples, pero nada que hacer, no se provoca ningun tipo de error


ni
se eliminan los datos.

eso me hace suponer que el programa no pasa por ahi al salir (lo que me
sorprendre porque creo que en teoria es lo que deberia hacer). pero me


hace
dudar sobre mi entendimientode la session.

asi que les dire lo que me parece a ver si estoy en lo cierto:
* el objeto session se crea cada vez que un usuario se conecta a nuestro
sitio web
* cada objeto session tiene un sessionID que identifica de forma unica a
cada usuario (como un clave primaria digamos)

* la session muere o cuando pasan el tiempo maximo estipulado (20mn por
defecto pero modificable) o cuando se cierra de forma explicita la pagina
web (puede ser porque lo quiere asi el usuario o por cualquier problema de
tipo hardware, software, corte de luz)

¿estoy en lo cierto? ¿algo se me escapa? ¿porque no me funciona la
eliminacion de los datos en la tabla temporal? ¿se ejecuta el codigo o no?
¿si no se ejecuta porque? ¿como podria hacer para que funcionara? dicho de
otra forma, ¿donde deberia colocar mi codigo para que funcione esta
eliminacion?, ¿seria posible hacer esta eliminacion en el


"session_onstart"
en vez del "session_onend"? ¿daria problemas cuando hay mas de un usuario
conectado a la vez?. en este caso, no se trataria de eliminar los datos de
nuestro sessionID sino todos los datos de la tabla temporal, lo que quiza
podria afectar a otros sessionID que estan activos (usuarios conectados).

otra cosa: ¿existe una diferencia entre cerrar una pagina y hacer un


logout?
¿como se hace un logout?




Preguntas similares