Foros del Web » Programando para Internet » PHP »

php manejo de session

Estas en el tema de php manejo de session en el foro de PHP en Foros del Web. Hola amigos del foro php tengo un problema. cual sera el motivo cuando me logueo a mi pagina osea pongo mi user y pass puedo ...
  #1 (permalink)  
Antiguo 02/08/2013, 10:24
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
php manejo de session

Hola amigos del foro php tengo un problema.

cual sera el motivo cuando me logueo a mi pagina osea pongo mi user y pass puedo ingresar bien a mi pagina principal de usuario registrado, el problema esta en que cuando yo pulso f5 o recargo la pagina. me saca de mi pagina principal, pero si no recargo no pasa nada me mantiene en la pagina.

necesito una ayuda, gracias de antemano.

este es el codigo que utilizo cuando se logueo

Código PHP:

<?php
    
include("conexion.php");
    
    if (!
$conexion) {
        Echo 
"Error al conectar".mysqli_error(); 
    }
    if(!
$conect){
        echo 
"Error al seleccionar bd"mysqli_error();
    }                   
                     
    if(!isset(
$_SESSION)){
    
session_start();
    }
     
       
$usuario=mysqli_real_escape_string($_POST['nombre']);
       
$clave=mysqli_real_escape_string(md5($_POST['password']));
         
       
$consulta="Select * from usuarios where nom='$usuario' and pwd='$clave'";
       
$consultar=mysqli_query($consulta) or die(mysqli_error());
       
$re=mysqli_fetch_array($consultar);

   if(!
$re[0]){
    echo 
"<script language= javascript>
        alert('unauthenticated user')
        location.href = 'login.php'
        </script>"
;
    }else{
    
$_SESSION['Nombre']=$re['Nombre'];
    
header("Location: index.php");
    }

?>
  #2 (permalink)  
Antiguo 02/08/2013, 13:04
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

el problema lo tienes aquí

Código PHP:
Ver original
  1. if(!isset($_SESSION)){
  2.     session_start();
  3.     }

inicias sesión correctamente pero no la mantienes con session_start(); por lo que cuando recargas la página el registro se perdió por ejecutar de nuevo el script.

quita esa parte del código y pon (y recuerda) session_start(); debe ir siempre lo más arriba posible de cada documento donde quieres mantener sesion de usuario.

saludos! :)
  #3 (permalink)  
Antiguo 02/08/2013, 14:00
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

Hola gracias por tu respuesta, quite
Código PHP:
if(!isset($_SESSION)){ 
    
session_start(); 
    } 
y puse solo session_start(); en la parte alta, primera linea. hace lo mismo siempre me saca de la pagina, no se cual es el problema, saludos.
  #4 (permalink)  
Antiguo 02/08/2013, 14:17
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

no termino de entender a qué te refieres con que "te saca de la página", yo entendí que es que la sesión no perdura.

si es porque te redirige a otro documento, en concreto login.php es por que este código javascript es el encargado de ello

Código Javascript:
Ver original
  1. <script language= javascript>
  2.         alert('unauthenticated user')
  3.         location.href = 'login.php'
  4.         </script>

si estás aprendiendo a controlar sesiones de usuario te recomiendo que comiences por leer sobre session_start(); sobre $_SESSION, a poner código sencillo y no mezclarlo con javascript, puesto que no te sería realmente necesario para aprender.

para administrar sesiones tienes que comenzar a la inversa de una lógica lineal.

-session_start() siempre al principio.

-¿existe sesión abierta?

--si es que sí entonces no entro en el logueo del usuario.

--si es que no entonces compruebo si existen las variables encargadas del logueo.

---si existen las variables de logueo del usuario entonces el usuario se loguea.

---sino no hago nada.

-si no hay sesión no hago nada, a no ser que quieras que el usuario se loguee sí o sí porque el contenido es restringido, en ese caso rediriges.

tú con tu código estás cometiendo el error de que da igual en qué momento se encuentre el usuario en su sesión, cada vez que recargue la página hará una consulta y si esa consulta está vacía entonces rediriges a login.php.

esa lógica es errónea.

EDITADO.
  #5 (permalink)  
Antiguo 02/08/2013, 14:28
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

la cosa es esto cuando hago login me lleva a una pagina principal donde se supone que ya me loguie, pero si pulso f5 en la pagina principal, me saca y me manda a login al parecer destruye la sesion cuando pulso f5 o recargo mi pagina principal. cual seria el error de codigo que tengo,gracias.
  #6 (permalink)  
Antiguo 02/08/2013, 14:35
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

Cita:
Iniciado por emilio_alac05 Ver Mensaje
la cosa es esto cuando hago login me lleva a una pagina principal donde se supone que ya me loguie, pero si pulso f5 en la pagina principal, me saca y me manda a login al parecer destruye la sesion cuando pulso f5 o recargo mi pagina principal. cual seria el error de codigo que tengo,gracias.
esto

Código PHP:
Ver original
  1. $usuario=mysqli_real_escape_string($_POST['nombre']);
  2.        $clave=mysqli_real_escape_string(md5($_POST['password']));
  3.          
  4.        $consulta="Select * from usuarios where nom='$usuario' and pwd='$clave'";
  5.        $consultar=mysqli_query($consulta) or die(mysqli_error());
  6.        $re=mysqli_fetch_array($consultar);
  7.  
  8.    if(!$re[0]){
  9.     echo "<script language= javascript>
  10.        alert('unauthenticated user')
  11.        location.href = 'login.php'
  12.        </script>";
  13.     }else{
  14.     $_SESSION['Nombre']=$re['Nombre'];
  15.     header("Location: index.php");
  16.     }

cómo cambiarlo ya te lo dije. para encontrar la solución piensa un poco, tómate tu tiempo.

una pista:

ese código se va a ejecutar sí o sí, tienes que controlarlo según la lógica que te dije y con if-else.

saludos.
  #7 (permalink)  
Antiguo 02/08/2013, 14:51
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

disculpa me podrías ayudar la verdad soy principiante en esto, gracias saludos
  #8 (permalink)  
Antiguo 02/08/2013, 14:58
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

Cita:
Iniciado por emilio_alac05 Ver Mensaje
disculpa me podrías ayudar la verdad soy principiante en esto, gracias saludos
lo importante es ¿quieres aprender?
  #9 (permalink)  
Antiguo 02/08/2013, 15:04
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

si me interesa inclusive estoy investigando sobre el tema que dijiste. session_start();
$_SESSION, saludos.
  #10 (permalink)  
Antiguo 02/08/2013, 15:07
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

Cita:
Iniciado por emilio_alac05 Ver Mensaje
si me interesa inclusive estoy investigando sobre el tema que dijiste. session_start();
$_SESSION, saludos.


¿el código que has puesto aquí es del index.php o qué documento es?
  #11 (permalink)  
Antiguo 02/08/2013, 15:11
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

este es el formulario para login
Código:
Código:
<form  action="validar.php" method="POST">
		 <table width="309" height="168" border="1" align="center">
      <tr>
        <td height="45" colspan="2" align="center"><strong>LOGIN USERS..</strong> </td>
      </tr>
      <tr>
        <td width="101" height="10" align="center"><strong>User</strong></td>
        <td width="192"><input name="nombre" type="text" size="30" style="height:28px"/></td>
      </tr>
      <tr>
        <td height="10" align="center"><strong>Password</strong></td>
        <td><input name="password" type="password" size="30" style="height:25px"/></td>
      </tr>
      <tr>
        <td height="34" colspan="2" align="center">
          <input type="submit" name="Submit" value="Accept"/>
		  <input type="reset" name="Submit" value="Clear"/>
        </td>
      </tr>
    </table>
	</form>
este es validar.php

Código PHP:
<?php 
    
include("conexion.php"); 
     
    if (!
$conexion) { 
        Echo 
"Error al conectar".mysqli_error();  
    } 
    if(!
$conect){ 
        echo 
"Error al seleccionar bd"mysqli_error(); 
    }                    
                      
    if(!isset(
$_SESSION)){ 
    
session_start(); 
    } 
      
       
$usuario=mysqli_real_escape_string($_POST['nombre']); 
       
$clave=mysqli_real_escape_string(md5($_POST['password'])); 
          
       
$consulta="Select * from usuarios where nom='$usuario' and pwd='$clave'"
       
$consultar=mysqli_query($consulta) or die(mysqli_error()); 
       
$re=mysqli_fetch_array($consultar); 

   if(!
$re[0]){ 
    echo 
"<script language= javascript> 
        alert('unauthenticated user') 
        location.href = 'login.php' 
        </script>"

    }else{ 
    
$_SESSION['Nombre']=$re['Nombre']; 
    
header("Location: index.php"); 
    } 

?>
  #12 (permalink)  
Antiguo 02/08/2013, 15:48
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

vale.

supongo que en el index.php que es el primer código, tienes incluido el validar.php no?

renombra el validar.php actual (a validar2.php por ejemplo) y vamos a trabajar con un nuevo validar.php. vamos a empezar de cero con el documento.

cuando hayas hecho esto, bien sencillo, pones tanto en el index como el nuevo validar session_start().

¿la página es de acceso restringido?
  #13 (permalink)  
Antiguo 02/08/2013, 15:54
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

ok, empezamos, ya esta

Última edición por emilio_alac05; 02/08/2013 a las 16:08
  #14 (permalink)  
Antiguo 02/08/2013, 16:31
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: php manejo de session

una vez que ya tienes lo anterior terminado

comenzamos a trabajar con la lógica de la sesión.

como te dije antes, hay que seguir una lógica particular.

además vamos a trabajar por procedimientos, siguiendo la dinámica de tu código
para ello vamos a utilizar la estructura de control de flujo if-elseif-else.

de la siguiente explicación, que es para darte una idea y hacerte pensar, lo que no entiendas preguntalo

para ayudarte con las expresiones de los if tienes que leer sobre los operadores de comparación sobre todo.

además te van a servir de ayuda isset que significa existencia y empty que significa vacío.

ambos se pueden combinar con el operador ! que significa no

por lo tanto para decir que si una variable no está vacía sería: if (!empty($variable){
}

lo mismo para isset: if(!isset($variable)){
}

Código PHP:
Ver original
  1. if (si existe el botón cerrar sesión)
  2. {
  3. //cierra sesión
  4. }
  5.  
  6. elseif (sino, si existe sesión)
  7. {
  8. //por ejemplo que diga esto
  9. echo "sesión iniciada como: ". $_SESSION['usuario'];
  10. }
  11. elseif (sino, si el usuario se loguea)
  12. {
  13. //ahora puedes reutilizar parte de tu código copiando y pegando literalmente lo que tienes
  14. //respecto a escapar caracteres y la consulta a la base de datos
  15.  
  16. //según lo que te devuelva la base de datos entonces tienes que o bien crear la sesión o denegar el acceso
  17.  
  18. //no se cierra el elseif todavía
  19.  
  20. if(si el resultado de la base de datos es igual a null )
  21. //igual a null porque mysql_fetch_array devuelve null si no contiene nada.
  22. {
  23. echo "login incorrecto";
  24. }
  25. else
  26. {
  27. //crea la sesión
  28. }
  29.  
  30. }//ahora sí se cierra

seguramente te de algunos errores, pero los podremos solucionar, lo importante es que entiendas qué pasos hay que seguir para construir un sistema rudimentario y básico de login.

EDITADO.

Última edición por guardarmicorreo; 02/08/2013 a las 18:19
  #15 (permalink)  
Antiguo 03/08/2013, 21:58
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: php manejo de session

Hola amigos necesito de sus ayudas e modificado mi codigo y siempre me saca de mi pagina principal cuando pulso F5(recargar), este es el nuevo codigo que manejo. Saludos.

login.html
Código:
<form  action="validar.php" method="POST">
		 <table width="309" height="168" border="1" align="center">
      <tr>
        <td height="45" colspan="2" align="center"><strong>LOGIN USERS..</strong> </td>
      </tr>
      <tr>
        <td width="101" height="10" align="center"><strong>User</strong></td>
        <td width="192"><input name="nombre" type="text" size="30" style="height:28px"/></td>
      </tr>
      <tr>
        <td height="10" align="center"><strong>Password</strong></td>
        <td><input name="password" type="password" size="30" style="height:25px"/></td>
      </tr>
      <tr>
        <td height="34" colspan="2" align="center">
          <input type="submit" name="Submit" value="Accept"/>
		  <input type="reset" name="Submit" value="Clear"/>
        </td>
      </tr>
    </table>
	</form>

validar.php
Código PHP:
<?php
 session_start
();
    include(
"conexion.php");
    
    if (!
$conexion) {
        Echo 
"Error al conectar".mysqli_error(); 
    }
    if(!
$conect){
        echo 
"Error al seleccionar bd"mysqli_error();
    }                   
                     
     
$_SESSION['Nombre']=$_POST['nombre'];
         
$_SESSION['passwrd']=$_POST['password'];    

       
$usuario=mysqli_real_escape_string($_SESSION['Nombre']);
       
$clave=mysqli_real_escape_string(md5($_SESSION['passwrd']));
         
       
$consulta="Select * from usuarios where Nombre='$usuario' and Password='$clave'";
       
$consultar=mysqli_query($consulta) or die(mysqli_error());
       
$re=mysqli_fetch_array($consultar);

   if(!
$re[0]){
    echo 
"<script language= javascript>
        alert('unauthenticated user')
        location.href = 'login.html'
        </script>"
;
    }else{
    
$_SESSION['Nombre']=$_POST['nombre'];
    
header("Location: principal.php"); // pagina de usuario logueado
    
}

?>

principal.php
Bienvenido a tu pagina.
//aqui la pagian del usuario logueado
  #16 (permalink)  
Antiguo 05/08/2013, 12:09
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: php manejo de session

y claro que va a estar mal.. si la validación la realizas por $_POST.. si vienes de una página doy a entender que sí le envias los datos del POST, si apretas F5 los valores del POST se borran por lo que no encuentra los datos y se redirige.
Tienes mal planteado todo, primero analiza el significado de SESION y luego corrige tu código.
  #17 (permalink)  
Antiguo 05/08/2013, 18:55
 
Fecha de Ingreso: enero-2012
Ubicación: <?php echo"Los teques"; ?>/////estado miranda
Mensajes: 196
Antigüedad: 12 años, 3 meses
Puntos: 9
Respuesta: php manejo de session

en las lineas

Código PHP:
Ver original
  1. }else{
  2.     $_SESSION['Nombre']=$_POST['nombre'];
  3.     header("Location: principal.php"); // pagina de usuario logueado
  4.     }

pon

Código PHP:
Ver original
  1. }else{
  2.     $_SESSION['Nombre']=$_POST['nombre'];
  3.     $_SESSION['logeado']="SI";
  4.  
  5.     header("Location: principal.php"); // pagina de usuario logueado [HIGHLIGHT="PHP"]
} [/HIGHLIGHT]

y en tu codigo

Código PHP:
Ver original
  1. if(!isset($_SESSION)){
  2.     session_start();
  3.     }

Pon esto

Código PHP:
Ver original
  1. if($_SESSION['logeado'] == "SI"; ){
  2.     session_start();
  3.     }


Esto verifica si el usuario esta logeado o no C:

Para restringir paginas a usuarios registrados pon

Código PHP:
Ver original
  1. if ($_SESSION['logeado'] != "SI"){
  2. header('location: index.php');

Etiquetas: manejo, mysql, select, session, sql, usuarios
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 19:47.