Problema session PHP

davidkaotiko7

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Feb 2014
Mensajes
9
Hola a todos.
Tengo un problema con mi session.
El problema comienza cada vez que borro caché, y vuelvo a ingresar en mi área.

Consta de tres archivos, formulario, login y el archivo donde muestro la información restringida.
El form funciona bien, el login recoge los datos y manda a la siguiente página, pero es la última la que no acepta el permiso.

Lo curioso es que borro la restricción de la última página, entro sin problemas por supuesto, y después vuelvo a incluir el mismo código que tenía antes en la página restringida, y ahora sí que acepta el código.

Funciona perfectamente, destruyo session y no se ve la zona restringida, accedo, y se ve.
El problema es saber porqué la primera vez no reconoce el permiso.

Os voy poniendo código.
La tabla, en la que tengo un usuario con permisos, 7777.

PHP:
CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(30) COLLATE latin1_spanish_ci NOT NULL,
  `usuario` varchar(30) COLLATE latin1_spanish_ci NOT NULL,
  `pass` varchar(30) COLLATE latin1_spanish_ci NOT NULL,
  `permisos` int(4) NOT NULL,
  `email` varchar(30) COLLATE latin1_spanish_ci NOT NULL,
  `fecha` date NOT NULL,
  PRIMARY KEY (`id`)
)

Login, que me acepta la información y me redirige a la siguiente.

PHP:
<?php
$conexion=mysql_connect('db','user','pass') or die('No hay conexión a la base de datos');
$db=mysql_select_db('tabla',$conexion)or die('no existe la base de datos.');

$usuarioIng=$_POST['user'];
$passIng=$_POST['permisos'];

session_start();
$consulta=mysql_query("select * from usuarios");
	    $puerta='continuar';	
		while($filas=mysql_fetch_array($consulta)and $puerta='continuar'){
			
			$id=$filas['id'];
			$nombre=$filas['nombre'];
			$usuario=$filas['usuario'];
			$pass=$filas['pass'];
			$fecha=$filas['fecha'];
			$permiso=$filas['permisos'];
							
			if (isset($usuarioIng)and isset($passIng)){
				if ($usuario==$usuarioIng and $passIng==$permiso){
					echo '<div class="ok">Bienvenido '.$usuario.'</div>';
					$miSession=array('id'=>$id,'nombre'=>$nombre,
							 'usuario'=>$usuario,'pass'=>$pass,
							 'fecha'=>$fecha,'permisos'=>$permiso);
					//ir a la pagina restringida
					$_SESSION['miSession']=$miSession;
					?>
                    <html>
                    	<head>
                        	<meta http-equiv="refresh" content="1; url= ../panel.php">   
                        </head>
                     </html>
                     <?php
					 $puerta='salir';
					 exit; 
				}else{
                        $resutado='no';				
					}
			}
			
		}
		if ($resutado=='no'){
		    echo '<div class="no">Su usuario o contraseña no se encontraron</div>';
			 ?>
             <html>
                    	<head>
                        	<meta http-equiv="refresh" content="3; url= acceso.php">   
                        </head>
                     </html>
             <?php
			
		}
?>

Aquí va la zona restringida.
PHP:
<?php 
session_start();
if ($_SESSION['miSession']['permisos']==7777){
    ?>  

    
    
    <?php
}else{
     echo '<div class="no">No tiene permisos</div>';
	 ?>
       <html>
          	<head>
               	<meta http-equiv="refresh" content="3; url= index.php">   
            </head>
       </html>
      <?php
}


?>
 
Última edición:

hasdpk

Delta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
30 Abr 2013
Mensajes
601
El problema que le veo es que en la sentencia de SQL del login le dices "tráeme todos los campos y filas de la tabla usuarios", después haces una verificación en "if ($usuario==$usuarioIng and $passIng==$permiso)", en caso de que no coincida la $respuesta es no.

La cuestión es que está dentro de un while y como has llamado a todos los usuarios el seguirá buscando y buscando hasta terminar con la tabla, por lo tanto, seguramente el último usuario de dicha tabla no coincide con los parámetros de la "verificación", por lo tanto, $respuesta es no.
 

davidkaotiko7

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Feb 2014
Mensajes
9

Qué crees que debería hacer?? Hago para que solo busque el campo que necesito??

Al ser solo un usuario podría evitar conectar a MySQL.
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.102
Qué crees que debería hacer?? Hago para que solo busque el campo que necesito??

Al ser solo un usuario podría evitar conectar a MySQL.

vos programaste eso?... como se le puede a alguien recorrer toda una tabla comparando campos... imaginate con miles y miles de users...

PHP:
$consulta = mysql_query("SELECT * FROM usuarios WHERE usuario='".$_POST['user']."' AND pass='".$_POST['pass']."'");
$filas = mysql_fetch_array($consulta);

if($filas['user']!=""){
 $id=$filas['id'];
            $nombre=$filas['nombre'];
            $usuario=$filas['usuario'];
            $pass=$filas['pass'];
            $fecha=$filas['fecha'];
            $permiso=$filas['permisos'];
 $miSession=array('id'=>$id,'nombre'=>$nombre,
                             'usuario'=>$usuario,'pass'=>$pass,
                             'fecha'=>$fecha,'permisos'=>$permiso);
                    //ir a la pagina restringida
                    $_SESSION['miSession']=$miSession;
 header('location: panel.php');
 die();
}else{
 die('NO tienes acceso');
}
 

vlad

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
26 Ago 2012
Mensajes
59
Insertar CODE, HTML o PHP:
$consulta = mysql_query("SELECT * FROM usuarios WHERE usuario='".$_POST['user']."' AND pass='".$_POST['pass']."'");

Ese codigo es vulnerable a inyecciones SQL. Hay que limpiar la informacion recibida del usuario antes de usarla en una sentencia sql:

Insertar CODE, HTML o PHP:
$consulta = mysql_query("SELECT * FROM usuarios WHERE usuario='".mysql_real_escape_string($_POST['user'])."' AND pass='".mysql_real_escape_string($_POST['pass'])."'");
 

davidkaotiko7

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Feb 2014
Mensajes
9
Gracias. No, el código no es mio.
Acabo de probar este código, y todo lo demás, y no accede.
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.102