Foros del Web » Programación para mayores de 30 ;) » .NET »

Cerrar Sesion

Estas en el tema de Cerrar Sesion en el foro de .NET en Foros del Web. Hola gente del foro tengo una duda. Alguien por favor me de una ayudita..... Resulta que tengo un formulario que contiene entre otros elementos un ...
  #1 (permalink)  
Antiguo 21/04/2005, 07:10
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 19 años, 8 meses
Puntos: 2
Cerrar Sesion

Hola gente del foro tengo una duda. Alguien por favor me de una ayudita.....

Resulta que tengo un formulario que contiene entre otros elementos un menú javascript autogenerado(lo genero con datos de la BD),y un imageButton(trabajo con C#), y con ese botón cierro la sesión del usuario y lo direcciono a home.Hasta ahi todo funciona correcto.
Y también le puse que cuando cierren la ventana. es decir en el evento onunload, haga lo siguiente....
Código PHP:
function cierra_sesion()
{
   
__doPostBack('ImageButton1','');

Si el usuario cierra la ventana hago lo siguiente....

Código PHP:
private void ImageButton1_Click(object senderSystem.Web.UI.ImageClickEventArgs e)
        {
            
Session.Abandon();
            
Response.Redirect("inicio.aspx");
        } 
Luego el usuario selecciona una opción del menú, se abre sin problemas. Pero el usuario da click en un botón de nuevo. Se hace el redirect hacia otra página para que se realice el ingreso, pero como se cambia de página se levanta el evento onunload de javascript y se hace el __doPostBack es decir se levanta el evento del ImageButton y se cierra la sesión. Pero esto no debería pasar. Ya que el usuario no ha cerrado la ventana ni tampoco ha dado click en el ImageButton. Simplemente está navegando dentro de la aplicación....

Que puedo hacer????

Alguna sugerencia.
Gracias de antemano
  #2 (permalink)  
Antiguo 21/04/2005, 08:34
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Pero recuerda que al hacer el redirect automaticamente se está haciendo el unload de la página porque ya no está activa.

checa bien como estás haciendo tu redirect.

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 21/04/2005, 08:42
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 19 años, 8 meses
Puntos: 2
Entonces como puedo solucionar este dilema?????

Si cierran la ventana o si dan click en el botón cerrar sesión debería cerrarse.

Pero si selecciona el usuario alguna opción de la ventana. Debería continuar la sesión activa....

Saludos
  #4 (permalink)  
Antiguo 21/04/2005, 08:58
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
phinojosa no programa ni en ese lenguaje viejo llamado C++
  #5 (permalink)  
Antiguo 21/04/2005, 09:10
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
y mis dientes?
  #6 (permalink)  
Antiguo 21/04/2005, 09:20
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
phinojosa y Developer9, por favor no empezar a pelar o a publicar post que no vengan al tema..

Cita:
Entonces como puedo solucionar este dilema?????
Y no te sería más facil hacer el session abandon en tu página inicio.aspx para que desde un principio te asegures que está limpia la session.

Y por cierto phinojosa... mm... no lo tomes a mal.. pero no eres tu la misma persona que Developer9 ?? o como están las cosas porque tienen la misma IP o acaso se conocen y comparten la máquina..?? porque sería de mal gusto estar jugando de esa forma.

Lo digo porque tambien este mensaje me llamo la atencion la otra vez..

http://www.forosdelweb.com/showthrea...41#post1053195


Salu2

Última edición por RootK; 21/04/2005 a las 09:27
  #7 (permalink)  
Antiguo 21/04/2005, 09:45
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 19 años, 8 meses
Puntos: 2
No soy la misma persona que Developer9. Simplemente salimos por la misma IP, está la red compartida. Y este individuo parece que ser que ha estado enviando post que no vienen al caso...

Por otro lado lo de limpiar la session al inicio, no lo veo óptimo. Puesto que de esta manera no tengo el control de poder bloquear al usuario que ya está conectado e intenta volver a conectarse....
  #8 (permalink)  
Antiguo 21/04/2005, 10:45
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Puedes meter los id de usuario en una variable de aplicación de arraylist, así evitarás que un usuario se conecte simultaneamente,

if Application("Users").Contains(idusuario)
...
else
Ctype(Application("Users").Add(idusuario)
Session("usuario") = idusuario
end if

y en el global.asax en el aplication_start
Application("Users") = new ArrayList()

Y luego además del session.abandon() y antes del mismo
try
Application("Users").Remove(Session("usuario"))
catch ex exception
end try
Session.Clear()

Y lo que yo aría es en tu botón de salir, llevar a la página principal como dice rootk y en el page_load de la misma hacer lo anterior
  #9 (permalink)  
Antiguo 21/04/2005, 13:02
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 19 años, 8 meses
Puntos: 2
Hola Jose_minglein2

Parece que ya voy por buen camino.....

Cuando el usuario da click en el boton Cerrar Sesion, lo direcciono a la página Home y se ejecuta las lineas de código que me diste. Si el usuario finaliza sesion correctamente.

Pero si el usuario cierra la ventana con el botón X de I.Explorer o si presiona las teclas <ALT>+<F4>. Se cierra la ventana y el usuario se queda en sesion.
Como solucionar esto????
  #10 (permalink)  
Antiguo 21/04/2005, 13:33
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Developer9
phinojosa no programa ni en ese lenguaje viejo llamado C++
¿Insinúas que C++ es un sencillo o más sencillo que C#?
  #11 (permalink)  
Antiguo 21/04/2005, 13:35
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por RootK
Y por cierto phinojosa... mm... no lo tomes a mal.. pero no eres tu la misma persona que Developer9 ?? o como están las cosas porque tienen la misma IP o acaso se conocen y comparten la máquina..?? porque sería de mal gusto estar jugando de esa forma.

Lo digo porque tambien este mensaje me llamo la atencion la otra vez..

http://www.forosdelweb.com/showthrea...41#post1053195


Salu2
J0j0j0... Como sea verdad eso me voy a caer de la silla
  #12 (permalink)  
Antiguo 21/04/2005, 14:09
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cita:
Iniciado por MaxExtreme
J0j0j0... Como sea verdad eso me voy a caer de la silla

Bueno si es verdad... soy la misma persona
  #13 (permalink)  
Antiguo 21/04/2005, 15:22
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Bien, eso es más peliagudo, una forma sería utizando frames,pero esa opción no me gusta, asi que intentaremos no seguir por esa línea, así pues, intentaremos otra cosa.

Global.asax
AplicationStart
Application("Users") = new ArrayList()
Application("IDSesion") = new ArrayList()

SesionEnd
dim i as integer = 0
dim encontrado as boolean = False
while i<Ctype(Application("IDSesion"),ArrayList).Count
if Application("IDSesion")(i) = Session.Id
encontrado=true
else
i+=1
endif
end while
Application("IDSesion").RemoveAt(i)
Application("Users").RemoveAt(i)

En la identificación:

if Application("Users").Contains(idusuario)
...
else
Ctype(Application("Users").Add(idusuario)
Ctype(Application("IDSesion").Add(Session.id)
Session("usuario") = idusuario
end if

En el botón de cerrar Session:
try
Application("Users").Remove(Session("usuario"))
Application("IDSession").Remove(Session.id)
catch ex exception
end try
Session.Abandon()

En el onunload de cada página:
javascript:__doPostBack('ejemplo','')

y en el page_load de cada página
if isPostBack
if request.Form("__eventtarget") = "ejemplo"
Session("usuario") = -1 ' o un valor que nunca sea id de usuario
end if
else
if session("usuario") = -1
dim i as integer = 0
dim encontrado as boolean = false
while i < Application("IDSesion").Count
if Application("IDSesion")(i) = Session.id
encontrado=True
else
i+=1
end if
end while
if encontrado=true
Session("usuario") = Application("Users")(i)
end if
end if

Conclusión, rollo patatero, consumo de recursos, rollo de programar (y eso suponiendo que no me haya hecho un lio y funcione) ¿para que?
Para nada, porque si un usuario cierra la ventana, a perdido su identificación, cuando vuelva a abrirla volverá a requerir la autentificacion (a no ser que se usen cookies), mi opinion, despues de todo este rollo, acortar el tiempo de sesion y listo, así si cierra la ventana a los x minutos sesion abandonada, sesion limpia, y recuperación de recursos y nos ahorramos todo este lio, asi que te recomiendo esto último con el 1º codigo, no??
  #14 (permalink)  
Antiguo 21/04/2005, 15:26
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Bueno si es verdad... soy la misma persona
Ya se me hacía raro que fueran personas distintas..

Sin comentarios al respecto..
  #15 (permalink)  
Antiguo 21/04/2005, 15:37
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 19 años, 8 meses
Puntos: 2
Hola minglein2

La verdad el código que planteas se lo ve bastante complicado. Y la solución bastante simple. Creo que es lo más saludable.

Gracias
  #16 (permalink)  
Antiguo 21/04/2005, 15:42
Avatar de HenrydeSousa  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 300
Antigüedad: 19 años, 7 meses
Puntos: 2
jajaja este foro si que ha sido desestresante, nada mejor después de un día lanzando código, disculpenme por no decir nada productivo pero es que lo de developer9 y phinojosa estuvo bueno jeje. Saludos...
  #17 (permalink)  
Antiguo 21/04/2005, 23:44
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Hombre complicado, depende, si fuese estrictamente necesario yo utilizaría algo así, (o frames, habria que estudiarlo), pero ya te digo, que en mi opinion es mejor no complicarse tanto la cabeza, utilzar el primer código y un tiempo de session corto (de 10 a 20 min) y si el usuario no interctua que se vuelva a identificar.
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 03:40.