Foros del Web » Programando para Internet » PHP »

No puedo cerrar una sesion en hosting, sí en local.

Estas en el tema de No puedo cerrar una sesion en hosting, sí en local. en el foro de PHP en Foros del Web. Hola, pues nada, a ver si alguién me puede echar una mano, le he dado mil vueltas al asunto, de todas las soluciones posibles para ...
  #1 (permalink)  
Antiguo 16/08/2004, 03:55
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
No puedo cerrar una sesion en hosting, sí en local.

Hola, pues nada, a ver si alguién me puede echar una mano, le he dado mil vueltas al asunto, de todas las soluciones posibles para cerrar sesiones, etc, en el server de mi hosting no va ninguna, en local todas.

He leido algunas cosas sobre la configuración del php.ini, destacar que, creo evidentemente, no tengo acceso al php.ini, pero lo que más he visto ha sido relativo a las cokiees y yo solo uso el identificador de sesión en el navegador, por si no me explico bien: el PHPSESSID (por cierto, se le puede cambiar ese nombre?).

Bueno, al lio, tengo un sistema de usuarios y una vez inician sesión no puedo desconectarlos, de lo que más me extraña es que solo uso session_start() y aún después de haber cerrado el navegador tarda un poco en destruir esa sesión, pero el mayor problema es que mi script de desconexión no va, no los desconecta, en cambio en local sí.

He pensado en la configuración del tiempo de vida de... pero esto no es para las cookies solo???? y aún así, ¿al cerrar el navegador no debería destruir la sesión??, no digo que de inmediato pero tarda bastante y con una sola sesión (un usuario).
Por otra parte, si activo la privacidad de cookies en el navegador, al entrar en mi página me advierte del envio de cookies ... y .. bueno, solo uso session_start(), acaso esta función también envia alguna cookie??.

Bueno, pongo el código de mi logout.php, disculpad su extensión con los comentarios pero lo mismo ayuda.
LOGOUT.PHP:
Código PHP:
<?php
// Si ya esta iniciada la sesion mostramos el contenido protegido
if (($_SESSION[usuario]) or ($_SESSION[admin]))
{
$usuario $_SESSION[usuario];
// Eliminamos el usuario de la tabla de usuarios en linea
mysql_query("DELETE FROM usuarios_activos WHERE usuario = '$_SESSION[usuario]' OR usuario = '$_SESSION[admin]'")
or die(
"Error: ".mysql_error());

// Comprobamos la sesion:
/*echo "Sesion ID: ".session_id()."<br />";
echo "<p>Sesion sin destruir aún: ".$_SESSION[usuario]."</p>";*/

// vaciarla
$_SESSION = array();

/*echo '<p>Paso 1 $_SESSION = array():<br />
Hemos vaciado la variable de sesion, no debería aparecer ningún nombre: '.$_SESSION[usuario].'<br />
Probamos con la variable $usuario: '.$usuario.'</p>';*/

// destruirla
session_destroy();

/*echo '<p>Paso 2 session_destroy():<br />
Por ultimo destruimos la sesion, no debería aparecer ningún nombre: '.$_SESSION[usuario].'<br />
Probamos con la variable $usuario: '.$usuario.'</p>';*/

  // Comprobamos si se destruye
  
if (($_SESSION[usuario]=='')&&($usuario==''))
  {
  echo 
'Te has desconectado correctamente: '.$usuario.'';
  
login_form();
  }
  else
  {
  echo 
'Por alguna extraña razón no hemos podido desconectarte: '.$usuario.', inténtalo más tarde, mil disculpas.';
  }

}
else
// Si no, mostramos el formulario
{
echo 
'<p>Como es lógico, no podemos desconectarte si no te has conectado '.$usuario.' ;D</p>';
login_form();
}
?>
Creía que el problema podría ser en el login al establecer variables propias a partir de las de sesion, como por ejemplo la de $usuario, en este logout la volví a establecer pensando que podría ser el problema, pero esto no tiene que ver con la sesión en sí no?, además, ummmm, al asignarla a una variable global de sesión, al desaparecer esta también debería desaparecer la mía no?.
Es decir ggg, espero no liarlo mucho:
$usuario = $_SESSION[usuario];
si destruimos la sesion, la variable $usuario debería ... ¿estar vacía no?.

Bueno, una ayudilla please, como veis muy liado.

Ah, por cierto, uso un sistema de plantillas y es una aplicación modularizada, gg como no, y lo primero que cargo es el session_start() por eso no aparece ahí en el logout.php, aún si incluyera la función tampoco va eh.

Un saludo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 16/08/2004 a las 04:01
  #2 (permalink)  
Antiguo 16/08/2004, 04:21
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,
Cita:
yo solo uso el identificador de sesión en el navegador, por si no me explico bien: el PHPSESSID (por cierto, se le puede cambiar ese nombre?).
¿Que quieres decir con "navegador"? ¿Que propagas el ID de sesion por URL (como parametro en las direcciones)? Y si, se puede cambiar el nombre: en el php.ini o con session_name() (www.php.net/session_name) delante de todos los session_start() de todas tus paginas.

Cita:
solo uso session_start(), acaso esta función también envia alguna cookie??.
Puede que tengas configurado el PHP para que propage el ID de sesion por cookies. En ese caso, si, session_start() crea una cookie.

Cita:
¿al cerrar el navegador no debería destruir la sesión??
No, se destruye fisicamente el fichero que contiene los datos de sesion mediante un "recogedor de basura" (garbage collector), que funciona dependiendo de las directivas session_gc_* eliminando las sesiones ya expiradas.

Por cierto, session_destroy() no destruye la sesion, solo destruye los datos.

Y exactamente, ¿cual es tu problema? ¿Que no te muestra el mensaje de 'Te has desconectado correctamente'? ¿O que despues de ese mensaje puedes volver a entrar a los lugares donde es necesario logearse? Porque por lo que veo, requieres que $usuario sea tambien vacio, pero le asignas el valor que tenia $_SESSION['usuario'] antes de borrarlo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 16/08/2004, 06:50
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Bueno, sin tanto código inútil, lo tenía un poco liado de las pruebas.
Básicamente, mi servidor remoto, el del hosting, no cierra la sesion, en local esto me va bien... bueno esto, y casi cualquier otro script con únicamente session_destroy();
Código PHP:
$_SESSION = array();
session_destroy();
// Que parece que joden los textos ggg XD.
  
if (!$_SESSION)
  {
  echo 
"Desconectao.";
  
login_form();
  }
  else
  {
  echo 
"No hemos podido colega.";
  } 
Pues, evidentemente, mi problema no es que no me muestre determinado mensaje, eso no sería un problema , el problema es que no se cierra la sesion, si el usuario entra en cualquier sección para usuarios después de haberse desconectado lo sigue reconociendo, esto, supongo yo que significa que la sesión no se ha cerrado no?.
Esto creo que lo tengo claro, la cuestión es porqué lo hace, si en local va bien es de suponer que es la configuración del server del hosting, ya dije que no podía modificar el php.ini, pero a lo que voy:

¿A qué se puede deber esto?, porque no tengo claro si es por mi código (en el dedicado a las sesiones) o por el server.
¿Puede ser por las cookies y entonces debo usar algo para borrarlas, hacerlas expirar o como sea?.
En fin, cosillas que he visto por ahí como:
session.cache_expire
session.cookie_lifetime
session.gc_maxlifetime
session.use_trans_sid
que creo que podrían tener que ver, no?

Sabiendo esto podría configurar mi server local para hacer pruebas, en fin, seguré probando, gracias de antemano por la ayuda, ok?.
Un saludo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 16/08/2004 a las 06:52
  #4 (permalink)  
Antiguo 16/08/2004, 07:11
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Bueno, pues hasta donde he podido, he configurado el php.ini local igual que el server de pago y sigue ocurriendo igual, en local me va bien.
Se me ocurre ya que el de pago (un estúpido fallo mio) es Windows, además mi versión de php en local es la 4.3.3 y en el de pago la 7.

No sé ya que más, seguiré probando, una ayudilla please.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #5 (permalink)  
Antiguo 16/08/2004, 08:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En el script del logout .. te falta iniciar la sesión que pretendes eliminar: (su contenido) usando session_start().

Por lo demás .. cuando modificas el valor (o "destruyes") una sesión .. no puedes obtener el valor de dichas variables (como para comprobar si existen) en el mismo script que modificastes su valor (o destruistes). Sólo puedes obtener su valor correctamente en la próxima petición al servidor; lease: recarga de página . .redirección hacia otro script .. etc.

Por ende .. un script típico de "logout" debería quedar tipo:

logout.php
Código PHP:
<?
session_start
();
$_SESSION = array(); 
session_destroy(); 
header ("Location: formulario_login.php");
?>
Sólo eso . .nada más de HTML ni salida .. ese script sólo va a cerrar tu sesión y redireccionar a donde indiques .. Donde redirecciones si quieres ya validaras si existe esa sesión de la forma habitual (intenta no usar if (!$_SESSION) y usa if (empty($_SESSION)) )


Un saludo,

Última edición por Cluster; 16/08/2004 a las 08:02
  #6 (permalink)  
Antiguo 18/08/2004, 08:46
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Okis, era algo que no tenía claro lo de comprobar la variable $_SESSION como existente o como vacía, no sabía la sintaxis exacta, gracias me viene muy bien.

Por lo demás no influye demasiado ya que es exactamente como lo tengo.
Como comenté, uso un sistema de plantillas el cual carga, por ejemplo, una cabecera siempre, en esta cabecera incluyo el inicio de sesion:
session_start(); por eso falta en el logout (esto ya lo explicqué en mi primer post eh?):
Cita:
Ah, por cierto, uso un sistema de plantillas y es una aplicación modularizada, gg como no, y lo primero que cargo es el session_start() por eso no aparece ahí en el logout.php, aún si incluyera la función tampoco va eh.
Así que, de ahí mi insistencia, mi código queda exactamente así Cluster, como tu dices, y por eso se me está yendo ya la olla porque no va:
Código PHP:
// El session_start(); ya está incluido en la plantilla, 
// en una cabecera, es lo primerito que cargan todos los scripts de mi sitio,
// por eso tampoco puedo usar redirecciones, 
// ya que me da el típico error de las cabeceras ya enviadas.

/***************************/
// Imaginemos ya el session_start();
$_SESSION = array(); 
session_destroy();
// Esto debería ir no???
/***************************/ 
En la misma cabecera uso un saludo de usuario, etc, y puedo ver que no se destruye la sesión ya que sigue reconociendolo, es decir, una vez recargada la página.
No quiero parecer listillo (más que nada porque soy un aprendiz de pacotilla XD ) pero ya sé que no puedo obtener resultados de un script en ese mismo script si no se ha enviado al server, sobretodo con un lenguaje del "lado servidor" gg , otra cosa es que imprimiera esos resultados como "prueba" al recargar la página y no tener que hacer otro logout, o por error.

Bueno, que el caso es que no va y no se me ocurre nada en especial más que lo de la basura esa ggg, es decir, lo del tiempo de destrucción de variables de sesión.
Un usuario desconectado con este script, en mi server de pago no se desconecta a no ser que cierre el explorador y pase un tiempo (aprox. 1 minuto o 2).
En cambio, en local sí.

Quiero probar a instalarme en local php 4.3.8 creo que es, ya que en el server de pago está el 4.3.7, a ver si fuera por algo de esto, como decía antes, en local configuré php con las opciones lo más parecidas posibles al de pago y nada, seguía sin funcionarme.

Estaría bien saber de alguién que le ocurriese algo parecido con algún hosting... o quizás sea mi conexión, pero no voy con Telefónica y no tengo el problema de su proxy caché, en fin, no sé que más pensar.

Alguna idea please.

Un saludo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 18/08/2004 a las 08:51
  #7 (permalink)  
Antiguo 18/08/2004, 09:08
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Bueno, mis últimas pruebas, una cosa sencilla y fácil, esto creo que debería tirar no?
Ni aplicación ni nada, archivos únicos de prueba:

Primero el login.php:
Código PHP:
<?php
session_start
();
if(
$_SESSION[nombre])
{
echo 
"Hola ".$_SESSION[nombre].", no te has desconectado.";
}
else
{
?>
<form action="proces_login.php" method="post">
Tu nombre: <input name="nombre" type="text" />
<input name="Enviar" type="submit" value="Enviar" />
</form>
<?php
}
?>
Ahora el archivo que procesa el formulario y el logueo,
proces_login.php:
Código PHP:
<?php
session_start
();

$_SESSION[nombre] = $_POST[nombre];

echo 
"Hola $_SESSION[nombre]<br />";
?>
<a href="logout.php" title="Desconectar">Desconectar</a>
Y por último, el logout:
Código PHP:
<?php
session_start
();
$_SESSION = array();
session_destroy();
?>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
Una cosa sencillita que debería tirar, no?, bueno pues no va, es que me estoy volviendo loco miranbdo código y creo que no va a ser mi código... o lo mismo soy muy torpe y no doy con la tecla .

Un saludo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #8 (permalink)  
Antiguo 18/08/2004, 09:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero que parte no te funciona?

yo sólo veo:
1) Asumes que propagaras el SID en cookies o automáticamente lo hará PHP por tí (php.ini: session.use_trans_sid). (no lo propagas manualmente)

2) No usas comillas en los indices de los arrays ($_SESSION, $_POST .. etc) eso te puede dar problemas al ser consideradas como nombres de "constantes" .. usa comillas preferentemente

3) en tu proces_login .. pretendes acceder a una variable de sesión que todavía no se ha llegado a definir (en teoría). Las variables de sesión no queda disponibles hasta la próxima petición al servidor (sea recarga de página, redireccionamiento.. etc)

ALgunos cambios:

proces_login.php:
Código PHP:
<?php 
session_start
(); 

$_SESSION['nombre'] = $_POST['nombre']; 
header ("Location: login.php");
?>
login.php
Código PHP:
<?php 
session_start
(); 
if(!empty(
$_SESSION['nombre'])) 

echo 
"Hola ".$_SESSION['nombre'].", no te has desconectado.<br>"
?>
<a href="logout.php" title="Desconectar">Desconectar</a> 
<?

else 

?> 
<form action="<? echo $_SERVER['PHP_SELF'?>" method="post"> 
Tu nombre: <input name="nombre" type="text" /> 
<input name="Enviar" type="submit" value="Enviar" /> 
</form> 
<?php 

?>
Y el logout .. como está.

Un saludo,
  #9 (permalink)  
Antiguo 18/08/2004, 10:20
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Vale, vale, ... joer tio, gracias por el interés eh gg, esto está siendo una charla ya entre nosotros... gg, tendré que pagarte?? .

Primero, lo de las comillas en los indices bufff, culpa del Dreamweaver, antes los usaba pero desde que ví que Dreamweaver los cogía bien, es decir, "coloreandolos" como palabras reservadas digamos posss, además uso bastantes y por ahora me han funcionado, pero por supuesto que ahora seguiré tu consejo.

Lo del proces_login es verdad , gg, no me he dado cuenta, pero... me saluda... ummm, bueno, será que no la coge como variable de sesión, es decir, entiendo que sería lo mismo poner:
Código PHP:
$saludo $_POST['nombre'];
echo 
"Hola $saludo.<br />"
Pero claro al pasar al logout.php sí que está ya definida $_SESSION['nombre']; y para el caso es igual, y en resumen, sea así o no, pos no me desloguea es decir.

A ver si me puedo explicar de una vez, y perdona por mi corta inteligencia.

Si, aunque en el process_login.php no sirva imprimir(echo) la variable de sesion pero sí es cierto que se define y se pasa a este logout.php como $_SESSION[nombre] = $_POST[nombre];

Si el código de logout está bien.

¿Se supone que la variable $_SESSION[nombre] debería estar vacía no?.
Ya me he dado cuenta de que no es que no exista ni nada parecido, si no que no esté definida o no se le pase el valor de $_POST[nombre];, si todo esto parece que es así:
¿Porqué en el loguin.php $_SESSION[nombre] continua teniendo su valor, es decir, el establecido en el proces_login.php, $_POST[nombre];

Pese a todos los fallos que pueda tener, ¿no debería estar vacía esa variable después del logout.php?.
En local me funciona...

2. Bueno, ummm, yo no asumo nada, es más, no tengo ni zorra idea, puedo pasar algunos parámetros de un phpinfo(); y me podriais decir algo, solo que de todo el tocho de cosas que he mirado possss... lo imagino, ya que en local sí que me va.
Esa variable, opción de php o lo que sea, como debería estar en ese caso en "on" no?. Pos lo miro y yastá a ver.

3. Y ya como solución final, probaré con tu código a ver.

4. Puesto a pensar, se me ocurren más cosas, yo antes tuve un nuke, php-nuke y de un tiempo a esta parte me comenzaron a dar problemas las sesiones y el reconocimiento de usuarios.
También usé una pequeña aplicación prefabricada de unos apuntes y creo recordar que también me pasó algo parecido, es por eso.

Bueno, pruebo con tu código que seguro será la solución y ya vemos si soy tan torpe como parece, ggg.

Ah, es que creo que me lio tanto que no me explico bien, mi problema es que "creo" que no se destruyen los datos de las variables de sesion si uso un session_destroy(); o en definitiva el código de logout.php.
Creo recordar que he usado código más simple aún...


Bueno, gracias de nuevo y ya comentaré algo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 18/08/2004 a las 10:23
  #10 (permalink)  
Antiguo 18/08/2004, 10:31
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Bueno, pues con los cambios tampoco me va, es decir, no me desconecta.
Por lo pronto, el formulario..., ummm, el $_SERVER['PHP_SELF'] no me debería enviar de nuevo a login.php????, eso está mal no?.
Bueno, lo he cambiado a proces_login.php para que procese el form, no???. Y bueno, como decía no va, no me desconecta.
$_SESSION['nombre'] no está EMPTY!!! gggg.

Si quieres te paso el enlace y lo ves tu mismo, okis?.
http://www.laguardia2004.net/login.php
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 18/08/2004 a las 10:33
  #11 (permalink)  
Antiguo 18/08/2004, 10:48
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Un phpinfo();
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #12 (permalink)  
Antiguo 18/08/2004, 15:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
bueno .. en PHP.net hay un comentario sobre usar $_SESSION=array() para el "logout" ..

Dice que require de register_globals a OFF . .si no lo usas a OFF tendrías que usar:

session_unset() si mal no recuerdo ..

ò bien:

unset ($_SESSION);

Revisa la documentación oficial:
www.php.net/session_unset

Un saludo,
  #13 (permalink)  
Antiguo 19/08/2004, 10:12
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Pos bueno, ya he probado de todo, aplicaciones ya hechas, código muy básicos y simples, en fin de todo y decididamente debe ser ya de las opciones de mi server... o ... de mi conexión ya que no he probado desde otro PC.
¿Alguna idea?, también he leido los manuales a cerca de las variables de sesion, está todo con valores correctos, es decir, como más o menos he ido viendo y se me ha aconsejado.
¿Quizás deba personalizar en mis script algunos parámetros de las sesiones, si es que puedo, como el tiempo de expiración o algo así, quizás gestionar cookies??

Soy muy paranoico y muy a pesar mio , me atreveré a poner un copy and paste de un phpinfo(); ggg:

Cita:
Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path C:\PHP\sessiondata C:\PHP\sessiondata
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On
Pleaseeeee, alguna idea por favor, gracias de antemano.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #14 (permalink)  
Antiguo 19/08/2004, 14:15
 
Fecha de Ingreso: junio-2004
Ubicación: Stgo, Chile
Mensajes: 51
Antigüedad: 19 años, 10 meses
Puntos: 0
Holas!
Pues yo estuve con el mismo quebradero de cabeza un buen tiempo.
Lo resolvi de la siguiente manera:
logout.php
session_name('nombre');
if (!session_id()){
session_start();
}
session_unset();
session_destroy();
setcookie('nombre','');
header("Location: http://" . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF'])
. "index.php");

En mi caso, mi servidor tenia el use_trans_id en off, lo que me indica que la sesión obligadamente se va a propagar por cookies.
haz la prueba agregando la instruccion setcookie(), como en el ejemplo, a ver cómo te va.

Suerte!!
Victoria
  #15 (permalink)  
Antiguo 19/08/2004, 14:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ojo Covids0020 con:
session_name('nombre');

por qué tu no defines nombre de tu sesión (no es obligatorio) .. Por lo demás, referente a "matar" la cookie manualmente:

Código PHP:
$nombre_sesion_actual=session_name();
setcookie($nombre_sesion_actual,'',time()-3600); 
Un saludo,
  #16 (permalink)  
Antiguo 21/08/2004, 13:32
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Perdona Cluster, no entiendo en que pueda influir el nombre de sesión, por defecto PHPSESSID no?, de todas formas esto ya lo cambié en este tiempo que he estado mirando cosas de las sesiones y he establecido mi propio nombre de sesión, aún así el tema no me va de ninguna de las dos formas.

Probaré con lo de matar las cookies a ver que pasa, de nuevo un millón de gracias.

Ah, ah, perdón no ví el post de Victoria, vale, vale, sisi usaria mi nombre de sesión o en su defecto, precisamente el de por defecto.
Mi server supongo que lo propagará de ambas formas no?, según se pueda o no.
Probaré el código Victoria y comento que tal.

Gracias de nuevo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #17 (permalink)  
Antiguo 21/08/2004, 14:12
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Uffff, como son las cosas, que trabajillo me ha costado, aunque sigo sin entender porqué antes no, es más no creo que haya sido tán fácil o... no caer antes, pero bueno, gracias a vuestros comentarios decidi intentar destruir la sesión específicamente, es decir, por su identificador y... tachannnn!!! ya va.
Código PHP:
session_start();
  unset(
$HTTP_SESSION_VARS['nombre']);
  
session_unset('PHPSESSID o id de sesion');
  
$HTTP_SESSION_VARS = array();
  
session_destroy('PHPSESSID o id de sesion');
  
session_destroy($HTTP_SESSION_VARS['nombre']); 
Sigo sin creerlo aún, algún comentario please, y por supuesto, de nuevo muchísimas gracias.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 21/08/2004 a las 14:33
  #18 (permalink)  
Antiguo 21/08/2004, 16:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. haz hecho un gran "mezcladito" de cosas ...

Si usas en tu aplicación los arrays superglobales: $_SESSION .. no deberías meter a "$HTTP_SESSION_VARS" (experimenta usando una de las dos alternativas)


Estos session_destroy() no tienen ningún fundamento:
session_destroy('PHPSESSID o id de sesion');
session_destroy($HTTP_SESSION_VARS['nombre']);

De hecho fjate que dice la documentación oficial al respecto:
Cita:
session_destroy
(PHP 4 , PHP 5)

session_destroy -- Destroys all data registered to a session
Description
bool session_destroy ( void )
Ese "void" dice que la función no tiene parámetros ..

Prueba sólo esto:

Código PHP:
<?
session_start
(); 
session_unset();
session_destroy(); 
?>
y observa que sucede. De todo lo que pusistes .. eso sólo y como mucho con:
$HTTP_SESSION_VARS = array(); (antes del session_unset()) es lo que realmente tiene alguna explicación lógica según la descripción de esas funciones.

Un saludo,
  #19 (permalink)  
Antiguo 23/08/2004, 06:53
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Primero aclarar que recién solucionado puse el post y copie y pegué sin limpiar el código, realmente estoy convencido que la solución fue "matar" y vaciar los valores la sesion especificamente, session_destroy(id de sesion), etc.
Ahora pone $HTTP_POST_VARS porque para asegurarme aún más en mi aplicación cambié todas las globales de sesión al formato antiguo $HTTP_...

Ya sé que esos session_destroy() no tienen ningún fundamento, debería sobrar el session_destroy() o cuando menos session_destroy('sesion'), pero bueno... no tenía porqué quitarlos y así me aseguraba más .

Y para acabar, Cluster, es comprensible que se pierda un poco el hilo de los post, más si andas respondiendo cientos a lo largo del día, tarde, etc... pero ese código no va, si repasas el post comprobarás que he hecho 40 millones de cosas y ejemplos y nada.
Yo solo sé, que con ese código que puse ya me funciona, además a la perfección, y que creo (ya pondré el código limpio que es válido) que la clave es llamar a la sesion especificamente y mejor aún si se le ha establecido un nombre.
¿Que el manual dice que son solo session_destroy(), etc, etc??, pos bueno, solo sé que a mí no me va así, y sí con session_destroy('name de sesion'), al igual que el unset, etc, etc.

Un saludo y ahora pongo el código limpio... ah, por supuesto y como siempre, un millón de gracias.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #20 (permalink)  
Antiguo 23/08/2004, 07:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. esperaremos el código "limpio" de tu logout.

Pero .. sólo un comentario referente al nombre de la sesión (si lo indicas)

Si creas una sesión con nombre personalizado usando session_name() .. este se indica antes de tu session_start() y debes usarlo en todo uso de sesiones (tanto para definirlas como para borrarlas) .. Ya sé que en tus ejemplo no usastes nombre de sesión .. Pero por lo mismo no deberías referenciarte a un nombre de sesión como el que PHP dá por defecto en su php.ini: PHPSESSID (o similar no recuerdo ahora) si lo cambias en tiempo de ejecución con session_name() ..

Un saludo,
  #21 (permalink)  
Antiguo 23/08/2004, 07:13
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Bueno, como suponía:

ESTE CÓDIGO NO VA, es decir, sin parámetros:
Código PHP:
<?php
  session_start
();
  
session_unset();
  
session_destroy();
?>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
ESTE CÓDIGO SÍ QUE VA:
Código PHP:
<?php
  session_start
();
  
session_unset('PHPSESSID');
  
session_destroy('PHPSESSID');
?>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
No sé porqué en mi caso debo usar parámetros para estas funciones de sesión , pero el caso es que solo así me funciona.

Editando:
Sorry, he visto el post después de mandar este:
He es que mareado un poco la pérdiz, las pruebas más básicas y los códigos de ejemplo los estoy poniendo con simples archivos.

En mi aplicación, uso un nombre de sesión establecido (como dices) antes del session_start(), a este session_start() sí que no le paso parámetros pero va todo bien, de todas formas es nada pasarle el nombre de la sesion (en un solo archivo), por lo demás en todas las funciones de sesion le estoy pasando el parámetro del nombre de sesion (no el de por defecto si no el que establecí), es decir, a excepción del session_start() todas las funciones de sesion se refieren especificamente según el nombre de sesión.
Pero gracias por la alacración, para asegurarme más, también lo haré con session_start();

Y por último, establecer nombre de sesión, etc, lo hice a partir de todo este follón, desde el principio no me iba nada con funciones sin parámetros, y las variables de sesion estaban con valores por defecto, es decir:
Código PHP:
// eran
session_start();
// estableciamos algun valor de sesion:
$HTTP_SESSION_VARS['nombre'] = $loquesea;
// y ya lo usabamos 
Para ese código no servía un logout estándar, como decía arriba, es decir, tenía que parametrizarlo o como se diga ggg

Espero ideas a cerca de porqué puede ser que tenga que hacer eso.
Gracias y un saludo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 23/08/2004 a las 07:22
  #22 (permalink)  
Antiguo 23/08/2004, 07:32
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Joder, no voy a darle más vueltas al asunto una vez resuelto, y por si sirve de ayuda resumiré el caso e intentando evitar errores, porque lo estoy liando un poco.

Esta minúscula aplicación de sesiones no va en mi server de pago, son los códigos que vosotros me disteis también:

LOGIN.PHP
Código PHP:
<?php 
session_start
(); 
if(!empty(
$HTTP_SESSION_VARS['nombre'])) 

echo 
"Hola ".$HTTP_SESSION_VARS['nombre'].", no te has desconectado.<br>";
foreach (
$HTTP_SESSION_VARS as $k=>$v)
{
echo 
"Valor $k: $v<br>";
}
?> 
<a href="logout.php" title="Desconectar">Desconectar</a> 
<? 

else 

?> 
<form action="proces_login.php" method="post"> 
Tu nombre: <input name="nombre" type="text" /> 
<input name="Enviar" type="submit" value="Enviar" /> 
</form> 
<?php 
}
?>
El login lo hace ok,
El proceso del formulario y logueo:

PROCES_LOGIN.PHP:
Código PHP:
session_start(); 
// Seguridad
$HTTP_POST_VARS['nombre'] = strip_tags($HTTP_POST_VARS['nombre']);


$HTTP_SESSION_VARS['nombre'] = $HTTP_POST_VARS['nombre']; 
header ("Location: login.php"); 
y el LOGOUT.PHP (ESTE NO VA):
Código PHP:
<?php
// Iniciamos sesión
  
session_start();
  
session_unset();
  
session_destroy();
?>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
Si hago un logout con las funciones de destrucción de variables de sesión, con parámetros, ya sea para un nombre de sesión definido o no (por defecto en mi sever PHPSESSID), sí que va:

LOGOUT.PHP QUE SÍ QUE VA
Código PHP:
<?php
// Iniciamos sesión
  
session_start();
  
session_unset('PHPSESSID');
  
session_destroy('PHPSESSID');
?>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
Igual si establezco un nombre de sesion o no, si no establezco ninguno, como en este caso, me funciona bien con el PHPSESSID.
Así de simple, algo que he visto en muchos sitios, tan básico, pos no me va, debo pasar los parámetros de la sesión a las funciones de destrucción de esta.
Lo podeis comprobar cuando querais si os pongo el link.

Un saludo.

PD: Aquí teneis el link:
http://www.laguardia2004.net/login.php
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 23/08/2004 a las 07:41
  #23 (permalink)  
Antiguo 23/08/2004, 07:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si usas nombre de sesión predefinido (el que sea ..) para tu logout debes igualmente indicar el nombre de la sesión que estás usando .. pero usando la función para tal fin: session_name()

Código PHP:
<?
session_name
('nombre_que_le_distes');
session_start();
session_unset();
session_destroy();
?>
Y si personalizas tu nombre de sésión .. se hace de igual forma .. con dicha función ..

Lo que comentas de:
// estableciamos algun valor de sesion:
$HTTP_SESSION_VARS['nombre'] = $loquesea;

Eso no es un nombre de sesión sino nua variable en la sesión actual con cierto valor. Por lo demás .. si usas ese tipo de arrays .. deberías usar session_register() para dar un valor en ella (o usar los arrays superglobales).

En fin .. veo que has probado mil cosas . pero al final no pones un ejemplo completo de lo que estás usando a fecha de ahora .. así, con código "fuera" de contexto se pierde el hilo del tema (independientemente que yo personalmente responda otros N mensajes al tiempo .. Intento leer y explicar lo que digo .. no digo "prueaba esto a ver si cuela" .. sino que intento dar mi punto de vista del porqué de mis respuestas. Y como humano que soy me puedo equivocar tambien ..)

Un saludo,
  #24 (permalink)  
Antiguo 23/08/2004, 07:56
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Cita:
Lo que comentas de:
// estableciamos algun valor de sesion:
$HTTP_SESSION_VARS['nombre'] = $loquesea;
Perdón quise decir:
VARIABLE DE SESIÓN , sorry.
Cluster, no te estoy diciendo nada de errores, es más, al revés por tanto interés y ayuda, faltaría más.

Vale, ok, es que así lo lio, pero te aclaro eso.

Lo estoy usando en ambos casos, en una aplicación y en código
"suelto".

En mi aplicación, lo que comentas lo hago bien, ya que uso un sistema de templates digamos, y lo primero que se carga es el session_name('sesion_id') (parámetro de ejemplo, no hacer caso) y después el session_start();

Así que todos los archivos, secciones, etc de mi aplicación comienzan estableciendo un nombre de sesion:
session_name('sesion_id');
y un inicio de sesion:
session_start();

Para luego hacer un logout o para lo que sea, la solución del logout para esta aplicación ha sido matar la sesión pasándole el parámetro del nombre de sesion:
session_destroy('sesion_id');, etc, etc.

Yastá, no tiene más.

Por último, he asumido que he liado la cosa yo, entre un código, mi aplicación (si se le puede llamar a sí a esa basurilla de código embarrullado que tengo), etc, etc.
Yo pongo un link y please, se prueba y ya verás como no va uno y otro sí, además vuelvo a poner el código de este ejemplo, si más comparaciones con otro.
Ahí va:
LOGIN.PHP
Código PHP:
<?php 
session_start
(); 
if(!empty(
$HTTP_SESSION_VARS['nombre'])) 

echo 
"Hola ".$HTTP_SESSION_VARS['nombre'].", no te has desconectado.<br>";
?> 
<a href="logout.php" title="Desconectar">Desconectar</a><br />
<a href="logout_no.php" title="Probar el logout que no va">Probar el logout que no va</a> 
<? 

else 

?> 
<form action="proces_login.php" method="post"> 
Tu nombre: <input name="nombre" type="text" /> 
<input name="Enviar" type="submit" value="Enviar" /> 
</form> 
<?php 
}
?>
PROCES_LOGIN.PHP:
Código PHP:
<?php 
session_start
(); 
// Seguridad
$HTTP_POST_VARS['nombre'] = strip_tags($HTTP_POST_VARS['nombre']);


$HTTP_SESSION_VARS['nombre'] = $HTTP_POST_VARS['nombre']; 
header ("Location: login.php"); 
?>
LOGOUT QUE NO VA:
LOGOUT_NO.PHP:
Código PHP:
<?php
// Iniciamos sesión
  
session_start();
  
// Vaciado de la variable de sesion nombre
  //unset($HTTP_SESSION_VARS['nombre']);
  
session_unset();
  
//$HTTP_SESSION_VARS = array();
  
session_destroy();
  
//session_destroy($HTTP_SESSION_VARS['nombre']);
?>
<h3><font color="#FF0000">Este es el logout que no va a funcionar.</font></h3>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
Y el logout que va:
LOGOUT.PHP:
Código PHP:
<?php
// Iniciamos sesión
  
session_start();
  
// Vaciado de la variable de sesion nombre
  //unset($HTTP_SESSION_VARS['nombre']);
  
session_unset('PHPSESSID');
  
//$HTTP_SESSION_VARS = array();
  
session_destroy('PHPSESSID');
  
//session_destroy($HTTP_SESSION_VARS['nombre']);
?>
<h3><font color="#006699">Este logout sí que va a funcionar.</font></h3>
<a href="login.php" title="Probar la desconexion">Probar la desconexion</a>
Yastá, na más eso, y se puede comprobar:

http://www.laguardia2004.net/login.php

Añadiré, que en otras aplicaciones prefabricadas como PHP-Nuke, códigos ya hechos de este tipo de sistemas, etc, tengo el mismo problema, no se mataban las sesiones. Un server muy particular el mio no?, pues ya no es culpa de mi código.
Un saludo y por favor, espero alguna idea ya más que nada por averiguar porqué puede ser, coger el link es nada, ni un minuto.

De verdad, muchas gracias eh.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #25 (permalink)  
Antiguo 23/08/2004, 08:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues si, .. un servidor muy "particular" .. Aquí el problema podría se que "yo" en lo personal estubiera equivocado en las técnicas del "logout" ..pero que otras aplicacioens con multitud de usuarios (reportando errores si los hay) y hasta el própio manual oficial "dice" como se ha de hacer .. No le veo explicación lógica.

Deberías hacer (o remitir a este mensaje) a los señores administradores de ese servicio de hosting particular .. a ver que dicen ellos.

Y de paso no estaría de más hacer el comentario en PHP.net

Un saludo,
  #26 (permalink)  
Antiguo 23/08/2004, 08:46
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Ufff, que alivio ver que tú opinas que es algo raro ggg, porque dudo muchísmo que estuvieras equivocado , más como dices, que es lo que viene en la documentación oficial.
La verdad es que este server no hace más que hacerme cosas raras y el servicio técnico bufff, casi imposible obtener nada, pero el problema era saber si es que yo no tenía el código bien.

Bueno, intentaré reportar algo en los sitios oficiales a ver que saco (no sé que tipo de reporte hacer, aquí lo he liado muchísmo ) e investigar mi hosting.

Un saludo y, como siempre, gracias.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #27 (permalink)  
Antiguo 23/08/2004, 09:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. si quires hacer el reporte tienes que:

1) indicar la versión de PHP que ese servidor
2) la configuración de sesiones de ese servidor
2a) la de "register_globals" también.
3) El código que supuestamente debería funcionar (tus últimos ejemplos) y el código que "funciona".

Recomendable: hacer incapié que ya has leido el manual oficial de PHP y sabes que esas funciones (session_unset() y session_destroy() no tienen parámetros "void") como para que no te manden al R.T.F.M. O_o

Un saludo,
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 02:48.