Eliminar la sesion en PHP

  • Autor Autor luaugii
  • Fecha de inicio Fecha de inicio
luaugii

luaugii

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas tardes, Dios los bendiga

Quiero saber como puedo eliminar la sesion de PHP.

Para destruir utilizo el siguiente codigo
PHP:
<?php

session_start();

/*include ('navegacion/funciones_navega.php');*/

include ('funciones.php');

if (isset ($_POST['cerrar_sesion']))

	{
		unset($_SESSION['usuario']);

		session_destroy();

		$mensaje="Salio de la Sesión..! ".var_dump($_SESSION);

		$url="http://localhost/odontologo/index.php?mensaje=$mensaje&error=1";

		presentar_mensaje_popup($url);
		
	}

Utilizo esto para ELIMINAR la sesión, mediante un BOTON SUBMIT.

PERO cuando aplasto el BOTON DE REGRESAR (ATRAS) del Navegador, inmediatamnete regresa a la misma página con el mismo usuario logeado.

¿Que puedo hacer?

muchas gracias

Dios los bendiga
 
Proba con estas! no pongas el unset($_SESSION['usuario']);
PHP:
session_unset()
session_destroy();
$mensaje="Salio de la Sesión..! ".var_dump($_SESSION); 
$url="http://localhost/odontologo/index.php?mensaje=$mensaje&error=1"; 
presentar_mensaje_popup($url);
 
Estas validando en las paginas donde solo se puede acceder una vez logueado, que la sesion este inicializada? Si no es asi, quizas por eso puedes ver aun alguna pagina de estas, si usas datos de la seccion quizas aparecerian errores de que la sesion no existe y si no x eso no te das cuenta

He de mencionar que en mis años de programacion no he encontraod una manera mas sencilla o dinamica para validar esta situacion siempre incluyo una funcion o archivo que me valida la sesion en las secciones y es complicado si tienes muchas secciones. No hablo solo de PHP si no otros lenguajes... quiza es que no he investigado al respecto... ejeje
 
Proba con estas! no pongas el unset($_SESSION['usuario']);
PHP:
session_unset()
session_destroy();
$mensaje="Salio de la Sesión..! ".var_dump($_SESSION); 
$url="http://localhost/odontologo/index.php?mensaje=$mensaje&error=1"; 
presentar_mensaje_popup($url);

Muchas Gracias Victor por responder a mi pregunta,

Ya lo hice
PHP:
unset($_SESSION['usuario']);

Sí cierra la sesión, pero mi problema de seguridad es cuando el usuario presiona el botón "hacia atras" del navegador, el navegador le presenta los datos que tenia el usuario una pantalla antes de cerrar la sesión.

esta información puede ser sensible (delicada) quisiera la forma de eliminar el historial de todas las pantallas donde el usuario transito.

Ej: en Facebook, cuando cierras sesión y presionas "hacia atras" en el botón del navegador, automáticamente te sale pantalla de inicio de sesión de Facebook.

Muchas gracias por responder.!


Dios te bendiga
 
Última edición:
Muchas Gracias Victor por responder a mi pregunta,

Ya lo hice
PHP:
unset($_SESSION['usuario']);

Sí cierra la sesión, pero mi problema de seguridad es cuando el usuario presiona el botón "hacia atras" del navegador, el navegador le presenta los datos que tenia el usuario una pantalla antes de cerrar la sesión.

esta información puede ser sensible (delicada) quisiera la forma de eliminar el historial de todas las pantallas donde el usuario transito.

Ej: en Facebook, cuando cierras sesión y presionas "hacia atras" en el botón del navegador, automáticamente te sale pantalla de inicio de sesión de Facebook.

Muchas gracias por responder.!


Dios te bendiga

Es muy raro que siga mostrando datos despues de hacer eso, quizas muestra datos pero es xq no se actualizo la pagina que esta detras del popup que abris, si das a actualizar siguen viendose?
 
Excelente tu observación, lo voy a intentar.

---------- Post agregado el 06-feb-2014 hora: 19:38 ----------

Es muy raro que siga mostrando datos despues de hacer eso, quizas muestra datos pero es xq no se actualizo la pagina que esta detras del popup que abris, si das a actualizar siguen viendose?

sigue saliendo la misma cosa..!

Edite un archivo de Wordpress, para saber como ellos manejan el asunto de cerrar sesion en su WP-ADMIN

llegue hasta el archivo donde esta la "liga" esto es wp-login?action=logout así esta escrito.

pero bueno

wordpress cuando cierra sesion y presiono el boton del navegador , TAMBIÉN vá para atras, pero cuando quiero elegir otra opcion dentro del panel de control,
me trasnporta a la página de iniciar sesion.

me parece super bien..!

¿como debo validar, para que las páginas se muestren siempre y cuando este iniciada una sesion logeada?

muchas gracias por sus respuestas..!
 
¿como debo validar, para que las páginas se muestren siempre y cuando este iniciada una sesion logeada?

muchas gracias por sus respuestas..!

podrias probar
PHP:
if(!isset($_SESSION['usuario']))
{
    header("location:/url/");
}

ahi colocas la url a la cual queres ser redireccionado si no esta iniciada la sesion, solo cambia $_SESSION['usuario']) por el que corresponda 😀
 
Estas usando cookies? El index como lee los datos de session? Solamente con destroy deberia funcionar
 
Como dicen arriba, si en cada archivo no hay una comprobación que verifique si la sesión esta iniciada se mostrará lo mismo.
Sobre lo de WP, usan switch.
 
es cierto usan switch..! En Wordpress
 
Simplemente evita mandar cabeceras 304, así el navegador no cacheará la página, ni siquiera al volver atrás en el historial.
 
Para los usuarios logueados debes de mandar cabeceras que no permitan que la página se guarde en cache. Cache-control, Expires.

Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
 
Simplemente evita mandar cabeceras 304, así el navegador no cacheará la página, ni siquiera al volver atrás en el historial.

eso es un serio problema, si no se cachea la página tendrás carga extra innecesaria en el navegador

lo mejor que puedes hacer es como dice shadowhck cuando estés en una sección donde cargue información sensible, simplemente evitas que la cachee.

en realidad mejor sería que la información sensible no esté en el html directamente, sino que sea solicitada luego de cargar la página por javascript, la información debería ser devuelta solo si está logueado 🙂

saludos!
 
eso es un serio problema, si no se cachea la página tendrás carga extra innecesaria en el navegador

lo mejor que puedes hacer es como dice shadowhck cuando estés en una sección donde cargue información sensible, simplemente evitas que la cachee.

en realidad mejor sería que la información sensible no esté en el html directamente, sino que sea solicitada luego de cargar la página por javascript, la información debería ser devuelta solo si está logueado 🙂

saludos!
Claro, es eso a lo que me refería, no quieres enviar cabeceras 304 donde se muestren datos sensibles.

En una landing o páginas estáticas claro que lo mejor es enviarlas, y en los archivos estáticos también hace falta una "expires"... 😉

Lo de cargar la información asíncronamente puede tener sus ventajas, pero por otra parte eso significaría que un usuario sin javascript no podría acceder a ella.
 
Estimados Betas

Le doy gracias a Dios, porque pude resolver este inconveniente que me consumió todo el día de hoy.

Aquí expongo los correctivos que tome

pagina-incio.webp
y este es el codigo... una parte
PHP:
<?php 
	session_start();
	include("funciones.php");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Servicios de Odontologos</title>
<link href="css/estilos.css" rel="stylesheet" type="text/css">
</head>

<body>
<div id="barra-menu-inicio">


</div>
<?php 		
			
	if (isset($_SESSION['usuario']))
			header("Location: http://localhost/odontologo/entorno_usuario.php");

	else
		{
?>

<div class="ingreso_datos_pagina_inicio">
<form name="ingreso" method="post" action="">
<h1>Iniciar Sesión:</h1>
Para ingresar a tu perfil debes iniciar Sesión.
<hr>
<div align="center">
Usuario:<input name="c_usuario" type="text"
 placeholder="Ingrese su Identificación"  class="campo-datos">
Contraseña:<input name="c_passw" type="password"
placeholder="Favor escriba su Contraseña"  class="campo-datos">
<fieldset >
Paciente<input name="tipo_usuario" type="radio" value="Paciente">Odontólogo<input name="tipo_usuario" type="radio" value="Odontologo" required>
<input class="botones-pagina-inicio" name="iniciar-sesion" type="submit" value="iniciar sesión">
</fieldset>
</div>
<input name="clase_formulario" type="hidden" value="mi">
<br>
</form>
<form name="ingreso" method="post" action="perfil-persona.php">
<h2>Registrarse</h2>
Si no esta registrado aún, hazlo ahora..!<br/>
<div align="center">
<fieldset >
Paciente<input name="tipo-usuario" type="radio" value="Paciente">Odontólogo<input name="tipo-usuario" type="radio" value="Odontologo" required>
<input class="botones-pagina-inicio" name="b_registrarse" type="submit" value="registrarse" required>
</fieldset>
</div>
</form>
</div>
<?php }?>

<?php 
if ($_GET['error']==1)
	{
		$mensaje=$_GET['mensaje'];

		echo "<script language='javascript1.5'>
		alert ('$mensaje'); location.href='http://localhost/odontologo/index.php';
		</script>";
	}
?>

<?php 
	if (isset($_POST['iniciar-sesion']))
		{
			$usuario=trim(strip_tags($_POST['c_usuario']));
			$passw=trim(strip_tags($_POST['c_passw']));
			$tipo_usuario=trim(strip_tags($_POST['tipo_usuario']));
			$resultado_busqueda=buscar_usuario($tipo_usuario,$usuario,$passw);
			if ($resultado_busqueda->num_rows==0)
				echo "
				<script type='text/javascript'> 
					alert('Usuario no encontrado');
					
				</script>
				";
		}
?>
</body>
</html>
entorno-usuario.webp

aqui el código
PHP:
<?php
session_start();

include ('funciones.php');

if (isset ($_POST['cerrar_sesion']))
	{
		
		session_unset();
		$mensaje="Salio de la Sesión..! ";
		$url="http://localhost/odontologo/index.php?mensaje=$mensaje&error=1";
		presentar_mensaje_popup($url);
		
	}

if (isset($_SESSION['usuario']))
	{
		$persona=$_SESSION['tipo_usuario'];
		$usuario=$_SESSION['usuario'];
					
?>

<!DOCTYPE HTML>
<html>
<head>

<meta charset="utf-8">
<title><?php echo $usuario;?> | Perfil</title>
<link href="css/estilos.css" rel="stylesheet" type="text/css">

<meta name="viewport" content=" width=device-width; initial-scale=1.0">


<link href="css/colores.css" rel="stylesheet" type="text/css">
<link href="css/base.css" rel="stylesheet" type="text/css">
<link href="css/grande.css" rel="stylesheet" type="text/css" media="screen and(min-width: 981px)">
<link href="css/medino.css" rel="stylesheet" type="text/css"media="screen and(min-width: 481px) and (max-width: 980px)">
<link href="css/mini.css" rel="stylesheet" type="text/css"media="screen and(max-width: 480px)">
</head>

<body>
<div class="barra">
  <div id="titulo">
		Entorno de <?php echo $usuario;?>
  <img  src="http://localhost/odontologo/imagenes/<?php echo $persona;?>.png" width="50" height="50">
  </div>
  <div  id="titulo" style="text-align:right;"> 
  		<strong>Odontología de Guayaquil</strong>
  </div>
  <div id="salir">
  	<form method="post" action="cerrar_sesion.php">
    	<input name="cerrar_sesion" type="submit" value="Salir" title="Cerrar Sesión" class="botones-entorno-usuario">
	</form>
  </div>
</div>


</body>

</html>

<?php 
		echo "
				<script type='text/javascript'> 
					alert('".$_SESSION['usuario'].", Haz iniciado la Sesión');
					
				</script>
				";
		}
	else
		{
			$mensaje="Favor inicie la Sesion..!";
			$url="http://localhost/odontologo/index.php?mensaje=$mensaje&error=1";
			presentar_mensaje_popup($url);
		}

?>

Lo que hice en el "entorno de usuario" es que pueda solo ingresar a está página solo cuando este una sesion activa..!

Y en la página de "inicio de sesión" , iniciar la sesión con php y si en caso el "usuario" presione el botón "hacia atras" del navegador, utilizo un IF que verifica si eso sucede, y si eso sucede utilizo un HEADER y lo devuelvo al entorno de usuario"

De esta forma gracias a Dios , pude dar solución a este problema que no lo pude resolver ayer.

con parto con ustedes mi solución. En caso que otro beta lo necesite..!

Dios los bendiga..!
 
Claro, es eso a lo que me refería, no quieres enviar cabeceras 304 donde se muestren datos sensibles.

En una landing o páginas estáticas claro que lo mejor es enviarlas, y en los archivos estáticos también hace falta una "expires"... 😉

Lo de cargar la información asíncronamente puede tener sus ventajas, pero por otra parte eso significaría que un usuario sin javascript no podría acceder a ella.

eso es cierto, pero hay que tener en cuenta que encontrar hoy en día a un usuario sin javascript (teniendo como base que hasta los navegadores de los móviles tienen javascript) es muy raro, yo tengo como política no dar soporte a "obsoletos" cosas como el internet explorer 6, o gente con un navegador sin javascript. (es mi opinión personal), pero en general la industria tiende a establecer unos minimos prerequisitos para el desarrollo (como por ejemplo tener memoria suficiente para correr una app, etc.)

saludos!
 
eso es cierto, pero hay que tener en cuenta que encontrar hoy en día a un usuario sin javascript (teniendo como base que hasta los navegadores de los móviles tienen javascript) es muy raro, yo tengo como política no dar soporte a "obsoletos" cosas como el internet explorer 6, o gente con un navegador sin javascript. (es mi opinión personal), pero en general la industria tiende a establecer unos minimos prerequisitos para el desarrollo (como por ejemplo tener memoria suficiente para correr una app, etc.)

saludos!

Es muy cierto, el Java Script es muy importate, tanto para el "entorno de usuario", como para las validaciones antes que el servidor trabaje con los datos ("así alivianamos el trabajo del servidor").

JavaScript es Importante al momento de "FrontEnd" y "BackEnd".

Dios los bendiga
 
eso es cierto, pero hay que tener en cuenta que encontrar hoy en día a un usuario sin javascript (teniendo como base que hasta los navegadores de los móviles tienen javascript) es muy raro, yo tengo como política no dar soporte a "obsoletos" cosas como el internet explorer 6, o gente con un navegador sin javascript. (es mi opinión personal), pero en general la industria tiende a establecer unos minimos prerequisitos para el desarrollo (como por ejemplo tener memoria suficiente para correr una app, etc.)

saludos!
En cierto modo te doy la razón (si soportaras a IE6 sólo demostrarías masokismo, y casi que a IE7 te digo lo mismo), pero para mí las partes críticas de la web deberían funcionar sin javascript:
Hay muchos (si bien es cierto que cada vez menos) lectores de pantalla sin Javascript, y privarle del acceso a la web a un ciego sólo por ser ciego pues me parece una putada.
 
por suerte tengo un compañero de estudios ciego, y la verdad que javascript no le afecta en lo absoluto, de hecho, casi cualquier lector de pantalla puede leer los alt de una imagen "cargando" de alguna peticion ajax en casi cualquier navegador, para lo que no usa ajax (osea que no lleva tanto tiempo en terminar el proceso) funciona muy bien los lectores (hasta me atrevo a decir que el propio Orca de linux funciona excelente, si no contamos con opciones de pago).

saludos!
 
Atrás
Arriba