Foros del Web » Programando para Internet » PHP »

Como resolver esto?...

Estas en el tema de Como resolver esto?... en el foro de PHP en Foros del Web. Saludos Espero su colaboracion para poder resolver esto de las sesiones, resulta que he diseñado un sistema donde hay q ingresar un login y password, ...
  #1 (permalink)  
Antiguo 23/03/2007, 16:45
Avatar de El Cipote  
Fecha de Ingreso: febrero-2006
Mensajes: 213
Antigüedad: 18 años, 9 meses
Puntos: 2
Pregunta Como resolver esto?...

Saludos
Espero su colaboracion para poder resolver esto de las sesiones, resulta que he diseñado un sistema donde hay q ingresar un login y password, para la seguridad. Y es asi como se realizan los siguientes procesos:
Pag index:
1. Digitar login y password
2. Busque de login y pass en BD
Si existe -> Acceso permitido
Sino -> Acceso denegado
Pag exclusiva:
-Si existe
"Cualquier opcion", y ademas cerrar la sesion
ok, cuando elige cerrar sesion lo hace correctamente, pero cuando utilizo el boton del navegador "Atras" esta pag "exclusiva" me aparece el mensaje que ha caducado, "PERO AL DAR REFRESH" vuelve como si no hubiera cerrado la sesion. Como resolver esto? pues para mayor detalle estoy utilizando PHP.

Agradesco su tiempo y ayuda
  #2 (permalink)  
Antiguo 23/03/2007, 17:11
Avatar de gerson  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 481
Antigüedad: 19 años, 9 meses
Puntos: 4
Re: Como resolver esto?...

Hola El Cipote seria bueno q coloques parte del codigo en donde crees q esta el error
__________________

  #3 (permalink)  
Antiguo 23/03/2007, 20:30
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Como resolver esto?...

hola

Pues tendrias que usar session_destroy() en el vinculo de cerrar sesion, pero
Primero que todo aclaremos que session_destroy() elimina todos los datos asociados a una sesión, pero no se elimina la cookie que contiene el identificador de sesion en el cliente, lo que quiere decir que si se realiza una nueva peticion al servidor, este incorpora dicho identificador.
Por lo anterior se debe eliminar la cookie que mantiene el dentificador así:
1. Se elimina los datos registrados en la sesión:
session_destroy();
2. Se elimina la cookie que mantiene el identificador, para esto se envia una cookie:
$parametros_cookies = session_get_cookie_params();
setcookie(session_name(),0,1,$parametros_cookies["path"]);
Donde:
session_get_cookie_params: Devuelve la información sobre los parámetros de configuración de las cookies empleadas para guardar el identificador de sesión.
y

Setcookie(), tiene la siguiente estructura:
Setcookie(nombre,valor,fecha expiracion,path)
- nombre: Será el mismo que tiene la variable de sesión devuelto por session_name()
- valor: sirve cualquiera, puede ser 0
- Fecha: Debe ser una fecha anterior a la actual, puede ser 1.
- path: Contiene el valor por defecto de la cookie, utilizado en la gestion de sesion (gestion de sesion? esto es otro cuento, son directivas predefinidas en php.ini) Este valor se obtiene con: session_get_cookie_params();
Espero que te pueda servir...
  #4 (permalink)  
Antiguo 24/03/2007, 12:54
Avatar de El Cipote  
Fecha de Ingreso: febrero-2006
Mensajes: 213
Antigüedad: 18 años, 9 meses
Puntos: 2
De acuerdo Re: Como resolver esto?...

Ok para mejor entendimiento aqui esta el codigo:
Este esta en una pagina index.php
Código HTML:
<form name="form1" method="post" action="zonexclu.php" background-color="lavender" form style="margin:0" align="left">
<table width="172" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<td bgcolor="lavender"><div align="center">
Usuario 
<input name="usuario" type="text" id="usuario" size="8" align="right" font-family: "Arial, Helvetica, sans-serif">
</div></td>
</tr>
<tr>
<td bgcolor="lavender"><div align="center">
Password
<input name="password" type="password" id="password" size="8" align="right" font-family: "Arial, Helvetica, sans-serif">
</div></td>
</tr>
<tr>
<td bgcolor="lavender">
<div align="center">
<input type="submit" name="Submit" value="Entrar">
</div></td>
</tr>
</table>
</form> 
Este esta en una paginazonexclu.php
Código PHP:
<?  
session_start
();
if(empty (
$_POST['usuario']) || empty($_POST['password']))
{
echo 
"<p style='text-align:center;'>Debes proporcionar los datos</p>";   
$msg=" <a href=\"index.php\"> Click para regresar</a>";
echo 
"<p style='text-align:center;'>".$msg."</p>";
exit;
}
else 
{
include (
"scripts/funciones.php");
$conexion=conectarse();
$resultado mysql_query("SELECT * FROM socios WHERE cod_socio='{$_POST['usuario']}' and password='{$_POST['password']}'"$conexion); 
$field mysql_fetch_array($resultado);
$registros=mysql_affected_rows();
if (
$registros==0)
{
echo 
"<p style='text-align:center;'>No estas registrado</p>";   
$msg=" <a href=\"index.php\"> Click para regresar</a>";
exit;
}
else  
{
session_start();
$_SESSION['usuario']=$field['cod_socio']; 
$_SESSION['password']=$field['password']; 
}
}
?>
Este esta en una pagina logout.php
Código PHP:
<? 
session_unset
(); //$_SESSION['usuario'],$_SESSION['password']); 
/* la funcion unset() destruye la varible que se le de como argumento*/ 
//echo "Cerraste Sesion correctamente" 
        
echo "<div align='center'><img src='imagenes/exit.jpg'></div>";
        echo 
"<p style='text-align:center;'>Cerraste Sesion correctamente</p>";   
        
$msge="<a href='index.php'>Ir a Index</a>";
        echo 
"<p style='text-align:center;'>".$msge."</p>";
?>
Espero su compresion y ayudaa mi dificultad...
  #5 (permalink)  
Antiguo 24/03/2007, 18:25
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Como resolver esto?...

Hola

Bueno, te debe pasar lo mismo que le pasa a foros del web, finalizas sesión pero si le das back al explorador te muestra el foro en el que estabas

Crea entonces una tabla de sesion, e ingresa en esa tabla cada usuario que inicie sesion, y cuando se cierre la sesion, que se borren los datos de la tabla, y que si da history,back en index siempre haga la consulta a la tabla de sesion para saber si esta o no logueado, espero te sirva, suerte.
  #6 (permalink)  
Antiguo 24/03/2007, 18:37
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Como resolver esto?...

Prueba asi:

logout.php
Código PHP:
<?  
session_start
();
session_unset(); //$_SESSION['usuario'],$_SESSION['password']);  
/* la funcion unset() destruye la varible que se le de como argumento*/  
//echo "Cerraste Sesion correctamente"  
        
echo "<div align='center'><img src='imagenes/exit.jpg'></div>"
        echo 
"<p style='text-align:center;'>Cerraste Sesion correctamente</p>";    
        
$msge="<a href='index.php'>Ir a Index</a>"
        echo 
"<p style='text-align:center;'>".$msge."</p>"
?>
Un saludo,
  #7 (permalink)  
Antiguo 25/03/2007, 11:54
Avatar de El Cipote  
Fecha de Ingreso: febrero-2006
Mensajes: 213
Antigüedad: 18 años, 9 meses
Puntos: 2
Re: Como resolver esto?...

Ok, Saludos
Pues leido sus opiniones, pero me sigue pasando lo mismo. Creo que es una buena opcion lo que dice "EL Patron"; solamente desearia un poco de ayuda para hacerlo como dice...
Agradecido por todo
  #8 (permalink)  
Antiguo 25/03/2007, 16:26
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Como resolver esto?...

Cita:
Iniciado por El Cipote Ver Mensaje
[...]cuando utilizo el boton del navegador "Atras" esta pag "exclusiva" me aparece el mensaje que ha caducado, "PERO AL DAR REFRESH" vuelve como si no hubiera cerrado la sesion.[...]
Voy entendiendo tu problema. No hay una solucion directa para tu problema, y te explico por qué. Tu te logueas en una pagina x.php y en esa misma página muestras los datos restringidos. Al salir llamas un logout.php, y cuando das en el boton Atras pues estas regresando a la misma pagina que te logueó al inicio, la cual recibio los valores a traves de $_POST. Por eso te aparece que ha caducado. Al darle un refresh, estás volviendo a enviar los datos del formulario, y tu usuario se esta logueando de nuevo (logicamente).

La solucion que te propongo es esta:
  • Una página del formulario de inicio de sesion (index.php)
  • Una página que procese los datos del formulario (solo que los procese y que haga el login, pero que no muestre ningun contenido) (login.php)
  • Una página que mostrara el contenido exclucivo (previo chequeo de que el usuario está logueado) (paginazonexclu.php)
Créeme, solo asi podras solucionar tui problema. En login.php chequeas la base de datos y creas las variables de sesion y todo eso, y una vez que se ha logueado direccionas a paginazonexclu.php:

header('Location: paginazonexclu.php');

Un saludo,
  #9 (permalink)  
Antiguo 25/03/2007, 19:40
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Como resolver esto?...

Hola

Pues lo que me referia con la tabla sesion es crear una tabla con 2 campos, un idsesion y un campo llamado datos
en el primero se almacenara un numero aleatorio que sera creado apenas el usuario se loguee, y este numero lo identificara dentro de la pagina mientras este creada la sesion, y datos puede tener el nombre del usuario y la fecha por ej

Ahora bien, cuando le des click en cerrar sesion aparte del codigo que ya tienes hacer un query a la tabla sesion eliminando todo de esa tabla donde el id sea igual al id que se acabo de desloguear, y ahi lo redireccionas a la pagina de inicio automaticamente con un script asi :

<? tu codigo?>
<script>location.href=index.php</script>
asi no tendra tiempo de usar el boton back, pero si llegara a usarlo entonces deberas tener un codigo que siempre haga una consulta a la base de datos preguntando si el usuario aun esta logueado, y al no estar en la tabla pues no le dejara ver los datos, espero te sirva,suerte.
  #10 (permalink)  
Antiguo 28/03/2007, 19:26
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Como resolver esto?...

Cita:
Iniciado por El Patrón. Ver Mensaje
[...]asi no tendra tiempo de usar el boton back, pero si llegara a usarlo entonces deberas tener un codigo que siempre haga una consulta a la base de datos preguntando si el usuario aun esta logueado[...]
No es la solucion. Como explique en el post anterior, si la pagina que procesa el logueo es la misma que envia los datos al navegador, y despues se llama un logout que elimina la sesion, y al dar un Back, pues regresa a la pagina "exclusiva", que desafortunadamente es la misma que proceso el logueo. Esta pagina fue llamada usando el método POST, y se proceso con los datos de un formulario, por lo que el navegador devolverá que la pagina ha caducado, y le dara la opcion de refrescar la pagina si se desea enviar los datos del formulario nuevamente. Antes de iniciar sesion, el usuario no tenia ninguna fila asignada en la tabla de usuarios de la BD, asi que al enviar los datos del formulario nuevamente, lo logico es que el sistema lo procese como si recien estuviera logueandose, y creara una nueva fuila en la base de datos, y... whaala el usuario se logueo denuevo.

Cita:
Iniciado por El Patrón. Ver Mensaje
[...]deberas tener un codigo que siempre haga una consulta a la base de datos preguntando si el usuario aun esta logueado[...]
No serviria de nada, puesto que al dar en el boton Back, el navegador toma la pagina de su cache, y no la vuelve a pedir al servidor, por lo que ningún código PHP ni de cualquier otro tipo que se ejecute del lado del servidor será ejecutado. La página ya fue enviada al navegador, este la guardo en cache y pues si se la vuelve a pedir usando el Back pues tomara esta pagina guardada sin hacer ninguna peticion al servidor.

Lo mejor que puedes hacer es lo que te dije en el post anterior, que tu pagina que procesa los datos del login sea unica y exclusivamente para eso (me refiero, a que no muestre ningun tipo de contenido [que no envie nada al navegador])... Luego, usando un header('Location: ...'); dirijes a la pagina "exclusiva". Asi, al dar en logout, y si el usuario da en el boton Back, volvera al formulario y no a la pagina que lo proceso, pues ésta prácticamente no existe para el navegador...

Un saludo,
  #11 (permalink)  
Antiguo 28/03/2007, 20:17
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Como resolver esto?...

Cita:
Iniciado por okram Ver Mensaje
No es la solucion. Como explique en el post anterior, si la pagina que procesa el logueo es la misma que envia los datos al navegador, y despues se llama un logout que elimina la sesion, y al dar un Back, pues regresa a la pagina "exclusiva", que desafortunadamente es la misma que proceso el logueo. Esta pagina fue llamada usando el método POST, y se proceso con los datos de un formulario, por lo que el navegador devolverá que la pagina ha caducado, y le dara la opcion de refrescar la pagina si se desea enviar los datos del formulario nuevamente. Antes de iniciar sesion, el usuario no tenia ninguna fila asignada en la tabla de usuarios de la BD, asi que al enviar los datos del formulario nuevamente, lo logico es que el sistema lo procese como si recien estuviera logueandose, y creara una nueva fuila en la base de datos, y... whaala el usuario se logueo denuevo.


No serviria de nada, puesto que al dar en el boton Back, el navegador toma la pagina de su cache, y no la vuelve a pedir al servidor, por lo que ningún código PHP ni de cualquier otro tipo que se ejecute del lado del servidor será ejecutado. La página ya fue enviada al navegador, este la guardo en cache y pues si se la vuelve a pedir usando el Back pues tomara esta pagina guardada sin hacer ninguna peticion al servidor.

Lo mejor que puedes hacer es lo que te dije en el post anterior, que tu pagina que procesa los datos del login sea unica y exclusivamente para eso (me refiero, a que no muestre ningun tipo de contenido [que no envie nada al navegador])... Luego, usando un header('Location: ...'); dirijes a la pagina "exclusiva". Asi, al dar en logout, y si el usuario da en el boton Back, volvera al formulario y no a la pagina que lo proceso, pues ésta prácticamente no existe para el navegador...

Un saludo,
No serviria de nada..

Pues personalmente yo lo manejo asi y me funciona perfectamente, puesto que tanto al loguearse como al desloguearse viaja a la pagina login.php con un parametro distinto y por ej a la hora de loguearse el va y mira en la bd y si los datos son correctos crea una sesion y lo inserta en la tabla Sesion, y cuando se desloguea se elimina el dato de la base de datos y se libera la cookie... y entonces asi de click en el boton back.. mala suerte...

Asi, al dar en logout, y si el usuario da en el boton Back, volvera al formulario y no a la pagina que lo proceso, pues ésta prácticamente no existe para el navegador...

no hay datos en cache....
__________________
Suerte.
_______________________________
"La vida es el principio de la muerte".
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 13:07.