Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Impedir regresar a pagina anterior (https://www.clubdelphi.com/foros/showthread.php?t=45116)

Coco_jac 23-06-2007 00:10:47

Impedir regresar a pagina anterior
 
Hola amigos, mi problema es este, tengo una ventana de logeo al cual direcciona a la pagina pricipal, si el usuario es valido claro. bueno estando aqui como bloqueo que pueda regresar a la pagina de logeo.

Gracias por su ayuda.

dec 23-06-2007 00:15:10

Hola,

¿Para qué complicarse? Se me hace complicado lograr lo que dices, o, cuando menos, farragoso. ¿Qué hay de malo en que el usuario vuelva a la página de "logeo"? Cuando alguna vez lo he necesitado, en el Script PHP que muestra el formulario para que los usuarios se autentiquen, antes de nada, hago un "logout" del usuario. De modo que siempre que se entre en la página de "logeo" el usuario se vea forzado a autenticarse.

Aunque así explicado pueda parecer complicado, no lo es en absoluto, y, desde luego, se me hace más sencillo y natural que tratar de impedir al usuario que refrese a la página que le salga de las narices... me temo, como he dicho, que no debe haber una forma sencilla de conseguir esto, y mucho menos si el usuario se emperra en hacerlo... pero no sé qué sentido tiene, por otro lado. :)

roman 23-06-2007 00:38:12

Tampoco yo estoy seguro de que sea buena idea tratar de evitar regresar a una página. Pero algo puede intentarse:

login.php

Código PHP:

<?php
session_start
();

if (isset(
$_SESSION['usuario']))
{
  
header('location: indice.php');
  exit;
}

if (
$_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['usuario']) && !empty($_POST['usuario']))
{
  
$_SESSION['usuario'] = $_POST['usuario'];
  
header('location: indice.php');
  exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title> Inicio de sesión </title>
</head>
<body>
<h1>Inicio de sesión</h1>

<form method='post' action='<?php echo $_SERVER['PHP_SELF'];?>'>
Usuario <input type='text' name='usuario'>
<input type='submit'>
</form>
</body>
</html>

indice.php

Código PHP:

<?php
session_start
();

if (!isset(
$_SESSION['usuario']))
{
  
header('location: login.php');
  exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title> Página principal </title>
</head>
<body>
<h1>Página principal</h1>

<p>
Hola <?php echo $_SESSION['usuario']?>
</body>
</html>

La página para iniciar sesión (login.php) mira si ya se inició una, y de ser así, redirige a la página principal (indice.php). Ésta, a su vez, verifica que se hay iniciado sesión. De no ser así, manda a la de inicio. O sea, una a otra se pasan la bolita.

// Saludos

Coco_jac 04-07-2007 21:11:31

Hola gracias por responder, me habia olvidado de este Post,disculpen por el anterior post, entendi mal lo que un amigo necesitaba. realmente era esto lo que necesitaba :
se tiene una ventana de logeo el cual una vez realizado el logeo nos direccione a una ventana principal de consultas, todo bien hasta hasta aqui. Lo correcto es poder regresar a la ventana de logeo, como ustedes mencionan, cosa que es normal, pero estando nuevamante en la ventana de logeo lo q no es correcto es al dar click en SIGUIENTE esta nos direccione nuevamente a la ventana principal si antes habernos logeado. Eh tratado de destruir la sesiones existentes al cargar la ventana de logeo cosa que funciona la primera vez que carga, pero en la segunda no entra en esta parte del codigo.
Como puedo hacer que habiendo regresando a dicha ventana el boton de adenlante quede desabilitado o se borre el historial hasta el momento navegado o que puedo hacer para solucionar este problema.

Espero sus comentarios, muchas gracias.

semptrion 04-07-2007 21:52:29

Vamos por partes...
 
Premisa:
Cuando programamos para Internet, desconocemos cuál es el cliente que está interactuando con nuestro servidor.

Esta premisa nos permite ver un poco más allá del browser tradicional, en el que existen botones de adelnate y atrás, javascript o cookies.

De hecho, el protocolo lo único que requiere es texto plano. Y texto plano puede generar cualquier software.

Por tanto, no es correcto vivir pendiente del comportamiento de un cliente en particular. Si encuentras la maña para borrar el historial del IE, seguramente que esa maña no funcionará en el Mozilla; y si logras hacerlo también para el Mozilla, seguramente no funcionará en Konqueror y así, así.

Si un usuario no se encuentra autenticado en el sistema, no debería importar cuántas veces intente entrar a una página restringida, NO DEBERÍA PODER hacerlo.

En otras palabras, no se restringe sólamente la llamada, también se debe restringir el acceso

Cada uno de los programas restringidos debe tener una rutina de verificación de si el usuario está autenticado. En caso en que no esté, deben remitir el flujo del programa a la página de login.

El típico ejemplo:

Supongamos que este es el código de la página principal (donde sólo entran usuarios autenticados)
Código PHP:

<?php
include 'verificar_si_el_usuario_esta_autenticado.inc.php';

.
.
.

el resto del programa.

?>

el programa verificar_si_el_usuario_esta_autenticado.inc.php
Código PHP:

<?php

if( el usuario no est&#225; autenticado ) {
    /* debe autenticarse */
    
header'Location: login.php' );
    die();
}
?>

Como verás, se debe colocar el código de verificación de autenticación entre las primeras líneas de cada programa.

Una cosa más.

Siempre que sea enviado un formulario con método post, se debería "limpiar el buffer" del cliente para que no sea reenviado el formulario, como cuando se aprieta suficientes veces el botón de atrás.

Espero te sea útil.

Saludos

roman 04-07-2007 22:58:31

Cita:

Empezado por Coco_jac
pero estando nuevamante en la ventana de logeo lo q no es correcto es al dar click en SIGUIENTE esta nos direccione nuevamente a la ventana principal si antes habernos logeado.

¿Y por qué consideras que no es correcto?

Parodiando lo que comenta semptrion

Cita:

Empezado por semptrion
Si un usuario no se encuentra autenticado en el sistema, no debería importar cuántas veces intente entrar a una página restringida, NO DEBERÍA PODER hacerlo.

yo diría:

Cita:

Si un usuario ya se encuentra autenticado en el sistema, no debería importar cuántas veces intente entrar a una página restringida, SÍ DEBERÍA PODER hacerlo.
¿Cuál es el problema? El usuario ya se identificó correctamente así que ¿qué más da lo que haga?

Yo más bien pondría un enlace en las distintas páginas, para salir de la sesión. Ese enlace llevaría a un script en donde destruyes la sesión.

// Saludos


La franja horaria es GMT +2. Ahora son las 19:23:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi