Foros del Web » Programando para Internet » PHP »

Destruccion de sesion...

Estas en el tema de Destruccion de sesion... en el foro de PHP en Foros del Web. Gente: estoy tratando de conseguir eliminar las sesiones. Dado que cuando varios usuarios inician sesion, en el lado del servidor se guardan los SID (Session_ID) ...
  #1 (permalink)  
Antiguo 07/05/2003, 07:24
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
Destruccion de sesion...

Gente: estoy tratando de conseguir eliminar las sesiones. Dado que cuando varios usuarios inician sesion, en el lado del servidor se guardan los SID (Session_ID) sería bueno que al cerrar la aplicación visitada por dichos usuarios se destruyese dicho SID del servidor.

Consigo tan solo eliminar las variables de la sesion pero no consigo (utilizando session_destroy) eliminar el SID del lado del servidor.

Espero que alguien me pueda dar una mano.

Muchas gracias.

Daniel.-
  #2 (permalink)  
Antiguo 07/05/2003, 12:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Creo que te refieres que no consigues borrar el archivo que crea PHP en el servidor con las variables de sesion y de nombre el SID (Identificador Único de Sesion) ...

Si haces un "session_destroy()" .. automáticamente pasa ese archivo en el servidor al modo "garbage".

El modo "garbage" es .. por poner un ejemplo: "En modo, esperar que pase el camión de la basura para llevarse (borrar) ese archivo del servidor" .. pero, la sesion (ese SID) ya no es válido (si usases session_destroy() ).

El "cuando ha de pasar el camión de la basura" .. lo determina la(s) directiva(s).

session.gc_probability = 1

Ese valor va expresado en porcentaje. En versiones inferiores a la PHP 4.3.0 se expresa al 100% ... En PHP 4.3.0 en adelante se puede expresar en otros porcentajes (al 1000% por ejemplo .. etc) .. Ese detalle lo define en PHP 4.3.0 en adelante la directiva:

session.gc_dividend = 100
(por defecto está a 100 (100%) .. simulando lo que no se puede cambiar en versiones inferiores a la PHP 4.3.0 )

El porcentaje indicado en session.gc_probability se refiere a las veces que se ejecuta una llamada a session_start() (para iniciar tus sesiones o continuar con una sesión abierta, no hay distinción).

Por lo tanto .. depende del numero de "ejecuciones" estimadas de session_start() deberías usar porcentajes mas o menos cercanos al 100% (o al % q digas en session.gc_dividend ).

Testea diferentes valores de esas directivas de tu php.ini en tu sistema con visitas reales para vere como se "borra" ese archivo de sesión automáticamente.

Otros detalles ...

En caso de que no inhabilites tu sesions via una ejecución de sessio_destroy() .. deberías ajustar tambien el valor de:

session.cache_expire = 0
(por defecto está a 1440 segundos si mal no recuerdo .. )

Con eso, tras "cerrar" tu navegador, la sesión pasa automáticamente al proceso de "garbage" y empiezan a actuar el resto de directivas y procesos que comenté mas arriba.

(fijate en el comentario del php.ini sobre windows .. si lo usas como S.O. en tu servidor con PHP ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 07/05/2003, 22:33
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
Miles de gracias!!!!!!!!!!!!!!!!!!!!!!!! Realmente me fué muy util todo lo mencionado Cluster! Te agradezco infinitamente y si precisás algo, pedilo, estaré atento y si está dentro de mis posibiliadades lo responderé.

Hasta pronto!
  #4 (permalink)  
Antiguo 07/05/2003, 22:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. estoy preparando un artículo/tutorial sobre el tema de sesiones ..

Estas preguntas me vienen bien para repasar "teoría" que por cierto es uno de los temas que mas se salta la gente (junto con el de configuración o por lo menos saber como tienen configurado las directivas de sesiones) a la hora de meterse a implementar una aplicación que use sesiones.

Todo lo que he dicho no es mas ni menos que lo que dice el manual de PHP (y un poco de prueba y experiencia en el uso de.) ...

Si quieres ver algo mas de sesiones .. busca ese tema en el buscador del foro .. veras que se ha comentado varias veces el tema (y por mi parte dando explicaciones de "teoría" y configuración de las sesiones).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 25/01/2005, 18:37
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Como bien comentas el tema de las sesiones es algo dificil de entender.

El problema que tengo yo es que uso hosting en un servidor linux con php 4 pero no tengo acceso a dichas variables.

Estoy intentando desarrollar una pagina web con control de usuarios que al cerrar el explorador se cierre la sesion y no "recuerde" al ultimo usuario. Como lo puedo hacer??

La variable session_cache_expire si me deja ponerla a cero, pero el resto ni tocarlas :(. Asi que cierro el explorador y vuelvo a tener el usuario registrado tal y como lo habia dejado.

Podeis ayudarme??. Muchas gracias.
  #6 (permalink)  
Antiguo 26/01/2005, 05:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Mis últimos mensajes son un poco "viejos" ya (del 2003!!) ...

Bueno ... como todo .. uno va aprendiendo algo más por el camino y con el tiempo. En mi mensaje anterio hago referencia a "session.cache_expire" .. en realidad la directiva que controla el tiempo de expiración de un SID es:

session.gc_maxtimelife (que por defecto está a esos 1440 segunos=24 minutos aprox.)

Y todo depende de como propages el SID en tus aplicaciones .. Si es en cookies o por el URL. Si es por cookies .. el tiempo de "vida" de un SID en el "cliente" (de duración de esa cookie que propaga el SID) lo define: session.cookie_expire (si no me equivoco .. lo estoy escribiendo de memoria).

Esa "cookie" que crea PHP (dicha directiva lo define) debería quedar a 0 .. así la usarías como cookie de sesión= cierras la última ventana abierta de tu sitio .. muere tu cookie y con ella el SID que relaciona tu sesión en el servidor ..

Intenta usar el buscador del foro por "sesiones" .. hay temas más actuales que hablan de todo esto (incluso en las FAQ's)

Un saludo,
  #7 (permalink)  
Antiguo 26/01/2005, 08:05
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Muchas gracias por tu respuesta tan rapida :)

Estoy interesado en no utilizar cookies e intentarlo mediante URL, de echo he desactivado el uso de cookies mediante session.use_cookies = 0.

Y esa es otra pregunta que me gustaría hacer ya que soy nuevo en esto... que es más seguro cookies o URL para pasar el SID??, si lo paso por URL el SID es "visible" para algun hacker?? yo utilizo la variable _SESSION para que se guarde toda la información en el servidor y no en el cliente.

Muchas gracias.
  #8 (permalink)  
Antiguo 26/01/2005, 08:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
esa es otra pregunta que me gustaría hacer ya que soy nuevo en esto... que es más seguro cookies o URL para pasar el SID??, si lo paso por URL el SID es "visible" para algun hacker?? yo utilizo la variable _SESSION para que se guarde toda la información en el servidor y no en el cliente.
A nivel de propagación del SID .. lo ideal (por seguridad) son las cookies. Puedes leer el documento que recomienda PHP su lectura:

http://www.acros.si/papers/session_fixation.pdf

Si pasa el SID en el URL .. es visible para todos y lo peor no es que sea visible para uno mismo .. (el cliente que inicia y usa esa sesión identificada por ese SID) .. sino para "otros" si propaga el SID por ejemplo en un link que dé en un foro/chat/e-mail a otra persona ...

Cita:
yo utilizo la variable _SESSION para que se guarde toda la información en el servidor y no en el cliente.
$_SESSION .. eso son las sesiones y se guardan en el servidor. Sólo es ese "SID" el que eventualmente puede almacenarse en el cliente NO los datos.


Un saludo,
  #9 (permalink)  
Antiguo 26/01/2005, 09:07
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Ok creo que entiendo el funcionamiento

Realmente lo que se guarda en la cookie del cliente es el SID que lo relaciona con su sesion en el servidor asi que las variables son guardadas en el servidor mediante _SESSION. Si quiero guardar alguna variable en la cookie utilizo _COOKIE.

En el momento que yo pongo session.cookie_lifetime = 0 obligo a que la cookie en el cliente expire al cerrar el navegador. Si combino esto con un session.gc_maxlifetime bajo, conseguiré que el SID caduque pronto y no sea valido (a la expera del recolector de basura, un 100% de uso para dicho recolector es correcto o es demasiado??).

El unico problema que le veo al uso de cookies es que algunos navegadores no las dejan pasar o estan deshabilitadas asi que tienes que morir al uso de URL :(. Si no he leido mal en algunos mensajes del foro el SID se pasa automaticament por URL si asi lo configuras aunque no recuerdo cual es la directiva que lo habilita.

De todas formas si yo combino el paso del SID por URL junto con la IP del usuario que la creó (esto lo guardo en el servidor) puedo confirmar que quien está accediendo mediante esa sesion es quien dice ser. Aunque si la asignación de IPs en el cliente verdadero es dinámica obligo a que éste se registre o se valide (si que estoy implementando un sistema de validacion). Es "segura" esta alternativa URL+IP al uso de cookies??.

Gracias.
  #10 (permalink)  
Antiguo 26/01/2005, 09:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
El unico problema que le veo al uso de cookies es que algunos navegadores no las dejan pasar o estan deshabilitadas asi que tienes que morir al uso de URL :(. Si no he leido mal en algunos mensajes del foro el SID se pasa automaticament por URL si asi lo configuras aunque no recuerdo cual es la directiva que lo habilita.
Bueno .. eso es cierto .. pero si tu avisas en tu aplicación que el uso de cookies es requerido por la seguridad de tus usuarios .. ellos veran si las aceptan. Las cookies llegan de tu sitio y será "confiable" para tus usuario (o debería serlo).

Ahora .. si tu quires propagar el SID en el URL .. OK, (ya conoces sus detallitos de seguridad si leistes el documento .pdf que te dejé el link). Con respecto a que PHP propgue el SID en el URL "si la cookie no se puede crear" .. esto no es tan "automático" .. Lo define en principio la directiva session.use_trans_sid a ON .. eso reescribe ciertos tags de HTML (lo define cuales la directiva allow_url_rewirte_tags o algo así) para que PHP inserte el SID en ellos automáticamente. No obstante no lo hace en redireccionamientos javascript (window.location .. etc) ni en header("Location ..") ni en refrescos vía <META ... >. En resumen .. podrías hacer una aplicación para "preguntar" a tu usuario como desea trabajar el sistema y en función de ese "perfil" propagas el SID en cookies o por el URL completamente (incluyendo las excepciones que PHP no lo va hacer por tí).

Cita:
De todas formas si yo combino el paso del SID por URL junto con la IP del usuario que la creó (esto lo guardo en el servidor) puedo confirmar que quien está accediendo mediante esa sesion es quien dice ser. Aunque si la asignación de IPs en el cliente verdadero es dinámica obligo a que éste se registre o se valide (si que estoy implementando un sistema de validacion). Es "segura" esta alternativa URL+IP al uso de cookies??.
La mayoría de cosas que expones ya lo hace PHP "por defecto" con su sistema de sesiones .. Pero siempre puedes implementarte tu própio sistema de sesiones .. No serás el primero .. ejemplos:

http://www.code.dearneighbor.com/db_esession.html
http://www.zend.com/zend/tut/session.php

El tema de "IP" .. realmente a mi no me gusta depender de ese facto .. Si fuera "único" Ok, pero ya sabes que existen los "proxys" que hacen que todo un grupo de PC's de una conexión pasen por una misma IP .. así que sería peligroso ..


Un saludo,
  #11 (permalink)  
Antiguo 26/01/2005, 09:46
 
Fecha de Ingreso: enero-2005
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Muchas gracias

La verdad es que no habia caido en los problemas de las redirecciones...

El uso de cookies lo hace todo mas sencillo, además si las configuras para que expiren al cerrar el navegador evitas algunos problemas de seguridad.

Enhorabuena por la web!! espero coger practica con esto del php y poder ayudar a los demás en lo pueda ser.
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 15:44.