Regresar a la página ComoCrearTuWeb.com
Resultados 1 al 14 de 14

Tema: [AYUDA] Expirar sesion

  1. #1
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12

    [AYUDA] Expirar sesion

    Muy buenas a todos.
    El caso es que tengo montado un sistema de usuarios que crea una sesion por cada usuario para mantenerlo conectado, pero quiero que una vez que el usuario haga logout la sesion expire para que cuando se vuelva a loguear se cree una nueva sesión y que esta expire tambien, se que esto se puede hacer con cookies pero estoy acostumbrado a las sesiones disculpen las molestias y gracias de antemeno :)

  2. #2
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Hola:

    Simplemente borra la sesión en el logout:

    Código PHP:
    session_destroy(); // Borra los archivos de sesión en el servidor
    $_SESSION = array(); // Borra las variables de sesión 

  3. #3
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    Gracias amigo lo pude solucionar de esta forma:

    Código PHP:
    session_destroy(); //Borro los Archivos de sesion
    session_unset(); //Borro las variables;
    header("location:home.php"); //El usuario vuelve al index de visitas 
    Ahora quiero proteger la pagina para que los no logueados no puedan acceseder como lo logro??

  4. #4
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Hmmmm, eso dependerá de cómo hayas hecho el inicio de sesión. Por ejemplo:

    login
    Código PHP:
    // Después de haber validado al usuario en la base de datos y demás
    $_SESSION['logged_in'] = true
    restringido.php
    Código PHP:
    if( $_SESSION['logged_in'] !== true ) {
      echo 
    'No tienes permiso!';
      return;
    } else {
      
    // muestras la página, incluyes el archivo o cualquier cosa

    Última edición por skaparate; 23/01/2014 a las 04:15 Razón: Errores en el código

  5. #5
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    Lo hice de la siguiente forma :

    Código PHP:
    //se comprueba la sesión
    if(!isset($_SESSION['logeado'])){
    //el usuario no esta logueado
    }
    else{
    //muestro la pagina

    Esto esta bien (disculpa las molestias).

  6. #6
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Sí, está bien, pero es inseguro. Mejor asegúrate de que haya iniciado sesión y que el valor y el tipo de la variable sea idéntico al que esperas. Mira este código en PHPFiddler (Presiona F9 o haz clic sobre Run para ejecutarlo): http://phpfiddle.org/main/code/pmf-3x9

    En general, == compara si los valores de las variables son iguales, mientras que === compara el valor y el tipo, así que, si el valor o el tipo no son iguales, la comparación es false.

  7. #7
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    Adapte el códigos con el '===' quedando asi:

    Código PHP:
    session_start();
    if((
    $_SESSION['logueado'] === false)){
    echo 
    "No tienes acceso";
    }
    else{
    echo 
    "Hola ".$_SESSION['nick']."<br>"

    Cuando el usuario se loguea todo anda perfecto pero al hacer logout y volver a cargar la pagina anterior (digamos index_user.php) me dice que la variable

    Código PHP:
    $_SESSION['logueado']; 
    y la variable

    Código PHP:
    $_SESSION['nick']; 

    Estan indefinidas en vez de mostrar "no tienes acceso" .

    Porque ocurrirá esto?

    Mi codigo de logout :

    Código PHP:
    session_unset();
    session_destroy();
    header("location:index.php"); 
    PD: Gracias por tu ayuda y paciencia.

  8. #8
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    Adapte el códigos con el '===' quedando asi:

    Código PHP:
    session_start();
    if(
    $_SESSION['logueado'] === false){
    echo 
    "No tienes acceso";
    }
    else{
    echo 
    "Hola ".$_SESSION['nick']."<br>"

    Cuando el usuario se loguea todo anda perfecto pero al hacer logout y volver a cargar la pagina anterior (digamos index_user.php) me dice que la variable

    Código PHP:
    $_SESSION['logueado']; 
    y la variable

    Código PHP:
    $_SESSION['nick']; 

    Estan indefinidas en vez de mostrar "no tienes acceso" .

    Porque ocurrirá esto?

    Mi codigo de logout :

    Código PHP:
    session_unset();
    session_destroy();
    header("location:index.php"); 
    PD: Gracias por tu ayuda y paciencia.
    Última edición por ElwebHD; 23/01/2014 a las 13:34

  9. #9
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Ah, claro, porque en el logout estás borrando todo lo que dentro de $_SESSION. Por ejemplo, al login:

    Código PHP:
    $_SESSION['nick'] = 'Mi Usuario'// Por ejemplo
    $_SESSION['logueado'] = true;
    print_r$_SESSION );

    /* Suponiendo que no hay más variables definidas en $_SESSION, el resultado sería:
      array( 'nick' => 'Mi Usuario', 'logueado' => true );
    */ 
    Por otro lado, después del logout:

    Código PHP:
    session_unset();
    session_destroy();
    print_r$_SESSION );

    /* Mostraría: array() */ 
    Siempre debes asegurarte de dos cosas:

    1.- Que la variable exista. Para eso se usa isset( $variable ).
    2.- Que el contenido no este vacío y cumpla con lo que esperas. Revisar que cumpla con lo que esperas que sea el contenido de la variable es complejo, pues depende de lo que quieres. Por otro lado, el que no este vacío es fácil:

    Código PHP:
    if( !empty( $variable ) )
    if( 
    $variable // En PHP, similar a C, cualquier variable que contenga algo evaluará como true. Si no esta definida en ningún lado, aparecerá la alerta que mencionas
    if( $variable != '' // en este caso dependerá del tipo de variable: $variable == número, $variable == string, etc. 
    Los ejemplos anteriores dependerán del punto 1, pues si la variable no existe, no tiene sentido procesarla. De cualquier forma, siempre que la variable exista, debes procesarla, o sea, asegurarte de que el contenido sea lo que esperas y no otra cosa, pues podrían hackear tu sitio (ningún sitio es completamente seguro, pero para qué hacerles la tarea fácil, no?). Esto último es especialmente cierto cuando se involucra el ingreso de contenido por parte del usuario y la lectura/escritura de datos en una base de datos, pues podrían inyectar código SQL como: $_POST['nick'] = 'DELETE * FROM usuario'; ($_POST['nick'] es el nombre del input en el formulario de login).

    En conclusión: el error implica que la variable no existe en ningún lugar, por ende, debes usar isset( $variable ) para asegurarte de que exista.

  10. #10
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    ahora lo hice de la siguiente forma :

    Código PHP:
    session_start();
    //primero compruebo que ambas variables existan
    if(isset($_SESSION['logueado']) && isset($_SESSION['nick'])){
    /*de ser asi me sersioro de que si la 
    variable logueado devuelve false mostrar
    un mensaje de error */
    if($_SESSION['logueado'] === false){
    echo 
    "ocurrio un error";
    }
    else{
    //De lo contrario muestro la pagina
    echo "Hola ".$_SESSION['nick'];
    }
    }
    else{
    //en caso de que las variables no existan...
    echo "Restringido";

    Ahora creo que resulta mas funcional ya que devuelve un mensaje o otro dependiendo de que fallo y en caso de que este todo bien imprime la pagina, pero me gustaría saber si esta del todo correcto segunda lo que me as sugerido hasta ahora

  11. #11
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Sí, está bien :).

  12. #12
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    esto quiere decir que porfin lo resolvi??

  13. #13
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Jajajaj, sí!

    Aunque deberías pensar cómo mejorarlo (puede que no haya forma)... tarea para la casa :)

  14. #14
    Recien Llegado! Habitante
    Fecha de Ingreso
    11 ene, 14
    Mensajes
    29
    Poder de Reputación
    12
    no, no creo que allá forma de mejorarlo, no veo como hacerlo o simplemente no se puede.

Temas Similares

  1. Cerrar sesion en mi web...
    Por mrtrujis en el foro Php Bases de Datos y MySQL (Nuevo!)
    Respuestas: 11
    Último Mensaje: 14/06/2012, 21:57
  2. ayuda con inicio de sesion
    Por rabulu en el foro Sistema de Registro de Usuarios
    Respuestas: 2
    Último Mensaje: 30/12/2010, 06:02
  3. [edit]Error en sesion con PHP
    Por Flame en el foro Php Bases de Datos y MySQL (Nuevo!)
    Respuestas: 1
    Último Mensaje: 01/05/2008, 22:32

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •