Foros del Web » Programando para Internet » PHP »

Manejo de sesiones - Qué hacer...

Estas en el tema de Manejo de sesiones - Qué hacer... en el foro de PHP en Foros del Web. Hola, Actualmente estoy montando una web, y necesito saber exactamente cómo funciona session_destroy y session_close (ambos se utilizan, ¿no?). Al entrar a la web, como ...
  #1 (permalink)  
Antiguo 14/04/2011, 03:58
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Manejo de sesiones - Qué hacer...

Hola,

Actualmente estoy montando una web, y necesito saber exactamente cómo funciona session_destroy y session_close (ambos se utilizan, ¿no?). Al entrar a la web, como de costumbre, pido un loggeo. Bueno, pues quería saber cómo al cerrar la web un tiempo, o al apagar el PC, o al cerrar el navegador... y luego volver a entrar, que la sesión esté cerrada. Que si después de intentar entrar, directamente la redirección (si la sesión ha caducado, por así decirlo) mande a /login.php, aunque quiera acceder directamente a X.php (un apartado de la web). Que si le da el botón de "atrás", la sesión "caduque" si ha pasado X tiempo... No sé si se me entiende. A ver qué me podéis decir. Muchas gracias.

Saludos.

Última edición por pep0te; 14/04/2011 a las 04:05
  #2 (permalink)  
Antiguo 14/04/2011, 04:22
 
Fecha de Ingreso: marzo-2011
Mensajes: 107
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: Manejo de sesiones - Qué hacer...

Nunca he puesto tiempo de sesion a las sesiones, pero sí que las he usado. Básicamente las sesiones lo que hacen es guardarte las variables que tu quieras en el momento que estás navegando por la página, y todo lo que guardes en ellas irán viajando de un lado a otro.

Todas las páginas que usen variables de sesión llevarán la línea
Código PHP:
<?php
   session_start
();
?>
Y las variables de sesión son un array como el $_POST. Por ejemplo:
Código PHP:
<?php
   session_start
();

   
$user 'pepito';
   
$_SESSION['user'] = $user;
?>
Y para mostarlas:
Código PHP:
<?php
   session_start
();

   echo 
$_SESSION['user'];
?<
Para cerrar sesión al cerrar la página se cerrará automaticamente, pero en caso de hacerlo manual primero destruimos las variables y despues la sesión
Código PHP:
<?php
   session_start
(); // hay que iniciarla primero claro

   
$_SESSION = array(); // ahora solo me acuerdo de esta
   
session_destroy();
?>
  #3 (permalink)  
Antiguo 14/04/2011, 04:29
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Manejo de sesiones - Qué hacer...

Mmmm vale, más o menos tenía esa idea. Voy a ir probando y comento. Me ha quedado muy claro :]. Si tengo alguna duda más, comento.

¡Muchas gracias!
  #4 (permalink)  
Antiguo 14/04/2011, 06:02
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Manejo de sesiones - Qué hacer...

Hola,

No sé cuál es la razón, pero tengo un .php de login (el que he dicho antes) y al darle al botón para comprobar si existe algún usuario recorriendo la DB, aunque no ponga nada o ponga algo mal, entra igualmente. Pongo el código:

Código PHP:
<?php
ob_start
();
session_start();
include(
"config.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="css/style.css" rel="stylesheet" type="text/css" media="all" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
</head>
<body>
<?php
    
if (!isset($_SESSION['username']) || !isset($_SESSION['privilegios']) || !isset($_SESSION['id'])) {
       
session_destroy();
    }else{
       echo 
"<script language=\"javascript\">window.location.href = \"portada.php?modulo=list\";</SCRIPT>";
       return 
false;
    }
    if(!empty(
$_POST['check'])) {
       
$busca mysql_query("SELECT n_socio, password, privilegios FROM usuarios WHERE username = '".$_POST['user']."' AND password = '".$_POST['password']."' AND activo = '0'");
       
$numbusca mysql_num_rows($busca);
       
$dato mysql_fetch_assoc($busca);
       if (
$numbusca != 0) {
            
session_start();
            
$_SESSION['id']=$dato['n_socio'];
            
$_SESSION['username']=$_POST['user'];
            
$_SESSION['privilegios']=$dato['privilegios'];
            echo 
"<script language=\"javascript\">window.location.href = \"portada.php?modulo=list\";</SCRIPT>";
       }else{
            
$error.='Datos incorrectos o usuario sin confirmar.';
       }
    }
?>
<center>
<table id="login">
    <form action="portada.php?modulo=list" method="POST">
        <tr>
            <td>Usuario:</td><td><input type="text" name="user" maxlength="15" style="width:181px; height:14px; padding-left:2px; padding-right:0px;" /></td>
        </tr>
        <tr>
            <td>Password:</td><td><input type="text" name="password" maxlength="15" style="width:181px; height:14px; padding-left:2px; padding-right:0px;" /></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" name="check" value="Login"></td>
        </tr>
        <tr>
            <td colspan="2">
                <?php
                    
echo ''.$error.'';
                 
?>
            </td>
        </tr>
    </form>        
</table>
</center>
</body>
Es un poco coñazo, pero no sabía cómo ponerlo. ¿Veis algo extraño?
  #5 (permalink)  
Antiguo 14/04/2011, 07:51
 
Fecha de Ingreso: marzo-2011
Mensajes: 107
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: Manejo de sesiones - Qué hacer...

Has conectado con la base de datos? Has hecho el mysql_connect('iphost','user','pass') y el mysql_select_db('database',$db)? No se si lo has quitado para no poner tantas lineas o es que no lo has puesto.

He visto que haces un mysql_query(), esta funció igual funciona asi, pero lo que yo suelo hacer es guardar en una variable la sentencia sql y despues llamo a mysql_query($query,$db) no he visto que pusieras la variable de la base de datos.
  #6 (permalink)  
Antiguo 14/04/2011, 08:02
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Manejo de sesiones - Qué hacer...

Si te fijas, al principio del código hay un include de config.php que es donde está todo. Si es que al darle click al botón, directamente entra a donde yo le digo y me muestra la tabla que pido (accediendo a la misma base de datos), pero no hace falta loguearse, es muy extraño. En las demás select utilizo el mismo método (realmente siempre que he hecho alguna select en una web) y nunca he tenido problemas. Es que ni me sale error ni nada.
  #7 (permalink)  
Antiguo 14/04/2011, 08:38
 
Fecha de Ingreso: marzo-2011
Mensajes: 107
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: Manejo de sesiones - Qué hacer...

Código PHP:
if (!isset($_SESSION['username']) || !isset($_SESSION['privilegios']) || !isset($_SESSION['id'])) 
{
       
session_destroy();
}
else
{
       echo 
"<script language=\"javascript\">window.location.href = \"portada.php?modulo=list\";</SCRIPT>";
       return 
false;
}

if(!empty(
$_POST['check'])) // este if no pertenece al de arriba con lo cual va a entrar independientemente del resultado de arriba
{
       
$busca mysql_query("SELECT n_socio, password, privilegios FROM usuarios WHERE username = '".$_POST['user']."' AND password = '".$_POST['password']."' AND activo = '0'");
       
$numbusca mysql_num_rows($busca);
       
$dato mysql_fetch_assoc($busca);
       if (
$numbusca != 0) {
            
session_start();
            
$_SESSION['id']=$dato['n_socio'];
            
$_SESSION['username']=$_POST['user'];
            
$_SESSION['privilegios']=$dato['privilegios'];
            echo 
"<script language=\"javascript\">window.location.href = \"portada.php?modulo=list\";</SCRIPT>";
    }
    else
   {
            
$error.='Datos incorrectos o usuario sin confirmar.';
    }

Que mal se lee el naranja XD por cierto, si destruyes la sesion borras las variables de sesion
  #8 (permalink)  
Antiguo 14/04/2011, 13:41
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Manejo de sesiones - Qué hacer...

Joder, es verdad. En cuanto pueda lo pruebo y comento.

Gracias!!
  #9 (permalink)  
Antiguo 05/05/2011, 03:53
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Manejo de sesiones - Qué hacer...

Bueno, después de un tiempo (sí sí, casi 1 mes) he podido retomar este tema. La verdad es que creo que el código script que me pusiste Saneko, no influye en la query ¿no? Me refiero a que da igual que esté dentro o no, porque ahí compruebo que si hay una variable no definida (!isset) que destruya la sesión, y la query directamente se la salta ¿no? porque tendría que ponerme aunque sea la variable $error (La llamo en el FORM)
  #10 (permalink)  
Antiguo 05/05/2011, 11:04
 
Fecha de Ingreso: agosto-2010
Mensajes: 81
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Manejo de sesiones - Qué hacer...

¿Podría alguien ayudarme? Necesitaría terminar esta parte para continuar haciendo el proceso interno de la web...

Un saludo

Etiquetas: manejo, sesiones
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 08:00.