No puedo iniciar sesion

  • Autor Autor giulichajari
  • Fecha de inicio Fecha de inicio
giulichajari

giulichajari

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Trabajo con MVC y puse una condicion en el llamado a la hoja de rutas, donde si el usuario no esta en la sesion llama al login, es decir no se puede entrar a ningun controlador sin estar logueado:

PHP:
<?php

session_start();

require_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/routes.php');

require_once('routes.php');

 

if (isset($_SESSION['usuario'])){

    require_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/views/template.php');

if (isset($_REQUEST['id'])){

    $id=$_REQUEST['id'];

 

}else{

$id=0;}

 

	if (isset($_GET['controller'])&&isset($_GET['action'])) {

		$controller=$_GET['controller'];

		$action=$_GET['action'];

 

        call($controller,$action,$id);

	}

}else{

    echo "no existe";

    call("login","index",0);

}

?>

De la seguridad me voy a encargar despues,quiero que me funcione la sesion. El caso es que siempre redirige al login:

PHP:
<?php

require_once ("C:\\xampp\htdocs\gestionweb\includes\claseConexion.php");

 

class Login{

  private $estado;

  private $idp;

 

public function __construct(){

 

}

 

public function User($usuario,$pass)

{

	try

	{

            $conexion = Conexion::singleton_conexion();

 

		$stm=$conexion->prepare("SELECT * FROM despensa.usuarios WHERE nombre='".$usuario."' AND pass='".$pass."';");

 

              $stm->execute();

           $array=$stm->fetchAll(PDO::FETCH_ASSOC);

 

           if ($array>0){

                foreach ($array as $n){

 

                session_start();

            $_SESSION['usuario']=$n['nombre'];

            $_SESSION['idlog']=$n['iduser'];

                }

 

           }

		return $array;

 

 

		}

		catch(Exception $e)

		{

			die($e->getMessage());

		}

	}

 

}

 

?>

Y aclaro que tambien llamo a sesion_start() en el documento de template..que puede ser?

Aca el javascript dentro de login:
Insertar CODE, HTML o PHP:
var usuarios;

$(document).ready(function() {

 

    $("#guardar").click(function(){

        var usuario = $("#usuario").val();

        var pass = $("#pass").val();

        $.ajax({

 

            type: "POST",

            url: "../gestionweb/views/procesologin.php",

            data: { "accion": "ingresar","user":usuario,"pass":pass},

       dataType:'json',

            error: function(){

                alert("error petición ajax");

            },

            success: function(data){

 

        if(data.length===0){

            alert("login incorrecto");

        }else{

 

            window.location.href="index.php?controller=template&action=index";

        }

 

            }

 

    });

 

});
 
y si probas no hacerlo por ajax, te funciona?.
debemos partir de ahi para determinar si algo en tu codigo php esta incorrecto.
yo por lo menos lo veo bien es por eso mi pregunta
 
y si probas no hacerlo por ajax, te funciona?.
debemos partir de ahi para determinar si algo en tu codigo php esta incorrecto.
yo por lo menos lo veo bien es por eso mi pregunta

Osea sin peticiones ajax:

PHP:
<form class="form-horizontal" style="vertical-align: central;">
    <p>ACCESO AL SISTEMA</p>
  <div class="form-group">
  <div class="row">
    <label for="inputEmail3" class="col-sm-2 control-label">Nombre</label>
    <div class="col-sm-4">
      <input type="text" class="form-control" id="usuario" placeholder="USUARIO"/>
    </div>
    </div>
    <div class="row">
      <label for="inputEmail3" class="col-sm-2 control-label">Contraseña</label>
    <div class="col-sm-4">
      <input type="text" class="form-control" id="pass" placeholder="PASS"/>
    </div>
    </div>
  </div>
  
  
        <a id="guardar" class="btn btn-info btn-lg" onclick="<?php 

require_once ('C:\\xampp\htdocs\gestionweb\models\claseLogin.php');

    $U1=new Login();
    $usuario=$_POST['user'];
    $pass=$_POST['pass'];
    $arrayu=$U1->User($usuario,$pass);
   
         if (count($arrayu)>0){ 
            
                foreach ($arrayu as $n){
           

         
            $_SESSION['usuario']=$n['nombre']; 
            $_SESSION['idlog']=$n['iduser'];        
                }
            
           
   // echo json_encode($arrayu);
}
        ?> ">
          <span id="guardar" class="glyphicon glyphicon-enter"></span> ENTRAR
        </a>

</form>

Ese seria el codigo del form..

pero ahora me da este error al hacer click en entrar:

SyntaxError: expected expression, got '<', como que no toma el html...
 
no, seria hacer toda tu logica enviando a un metodo por php, no en el onclick.

por ejemplo, tu form de inicio de sesion vaya a un metodo que haga el registro por session.

Te explico como hago yo.

index.php

tiene un metodo que consulta si ya existe una session cargada y si es asi lo carga en un vector.

siguiente, hace la consulta si el vector cargado figura como "conectado" el usuario y ahi esta la logica que si no esta conectado entonces lo manda al http://www.tuweb.com/index.php?route=Usuario/Login

el template de Usuario/Login su method post envia a http://www.tuweb.com/index.php?route=Usuario/PostLogin donde verifica contra la base de datos y si existe entonces graba en la variable de $_SESSION y cuando finaliza redirige al portal http://www.tuweb.com/index.php

como ves no uso ajax en todo el proceso.

Usuario/PostLogin hace lo siguiente

Insertar CODE, HTML o PHP:
					$_SESSION[$sc.'_codigoUsuario'] = (int)$fila['user_cod'];
					$_SESSION[$sc.'_estaConectado'] = true;
					$_SESSION[$sc.'_nombreUsuario'] = trim($fila['user_name']);

y el index.php tiene el llamado a un metodo que consulta si esta o no cargado la session, algo asi

Insertar CODE, HTML o PHP:
//obtiene los datos del usuario logueado
	function getDatosUsuario(){
		global $datosUsuario, $user_key, $sc, $txt, $user_cod, $Configuraciones;
		//session del usuario
		//Iniciamos la Session
		session_start();
		//Seleccionamos un codigo generado
		if (!isset($_SESSION['session_value']))
		{
			$_SESSION['session_value'] = md5(session_id() . time() . mt_rand());
			$_SESSION['estaConectado'] = false;
		}
		$sc = $_SESSION['session_value'];
		//usuario
		$user_key = !empty($_SESSION[$sc.'_usuario']) ? strtoupper($_SESSION[$sc.'_usuario']) : '';
		//codigo de usuario
		$user_cod = !empty($_SESSION[$sc.'_codigoUsuario']) ? $_SESSION[$sc.'_codigoUsuario'] : 0;
		//variable global para el usuario
		$datosUsuario = array();
		//cargamos nuestra variable principal 
		$datosUsuario += array(
			'codigo' => !empty($_SESSION[$sc.'_codigoUsuario']) ? $_SESSION[$sc.'_codigoUsuario'] : 0,
			'usuario' => $user_key,
			'conectado' => !empty($_SESSION[$sc.'_estaConectado']) ? $_SESSION[$sc.'_estaConectado'] : false,
			'nombreUsuario' => !empty($_SESSION[$sc.'_nombreUsuario']) ? $_SESSION[$sc.'_nombreUsuario'] : $txt['label_invitado'],
			'id_depart' => !empty($_SESSION[$sc.'_id_depart']) ? $_SESSION[$sc.'_id_depart'] : 0,
			'depart' => !empty($_SESSION[$sc.'_depart']) ? $_SESSION[$sc.'_depart'] : '',
			'cod_sucu' => !empty($_SESSION[$sc.'_cod_sucu']) ? $_SESSION[$sc.'_cod_sucu'] : '',
			'sucursal' => !empty($_SESSION[$sc.'_sucursal']) ? $_SESSION[$sc.'_sucursal'] : '',
			'correo' => !empty($_SESSION[$sc.'_email']) ? $_SESSION[$sc.'_email'] : '',
			'imagen' => !empty($_SESSION[$sc.'_imagen']) ? $_SESSION[$sc.'_imagen'] : '',
			'tipo_imagen' => !empty($_SESSION[$sc.'_tipo_imagen']) ? $_SESSION[$sc.'_tipo_imagen'] : '',
			'imagen_url' => !empty($_SESSION[$sc.'_imagen']) ? $Configuraciones->ScriptUrl . '?opt=Usuario/VerImagen' : $Configuraciones->UrlImages . '/default-avatar.jpg',
			'locked' => !empty($_SESSION[$sc.'_locked']) ? $_SESSION[$sc.'_locked'] : 0,
			'es_admin' =>  (!empty($_SESSION[$sc.'_id_depart']) && $_SESSION[$sc.'_id_depart']==1) ? 1 : 0,
			'es_funcionario' => !empty($_SESSION[$sc.'_es_funcionario']) ? $_SESSION[$sc.'_es_funcionario'] : false,
			'colapsar_menu' => isset($_SESSION['menu_colapsado_'.$sc]) ? $_SESSION['menu_colapsado_'.$sc] : -1,
		);
		//si es administrador entonces le colocamos como funcionario
		if (!empty($datosUsuario['es_admin'])){
			$datosUsuario['es_funcionario'] = true;
		}
	}

y en el index.php siempre se llama a dicho metodo y se consulta si ya esta "conectado" el usuario

Insertar CODE, HTML o PHP:
//datos del usuario
    $objUsuario->getDatosUsuario();        
    //array principal
    $opt = !empty($_GET['opt']) ? $_GET['opt'] : 'Portal/Inicio';
    //si no estamos iniciados le exigimos que se loguee para poder continuar
    if (!$datosUsuario['conectado'] && $opt != 'Usuario/PostIniciar')
        $opt = 'Usuario/Iniciar';

Es algo asi como lo suelo hacer, capaz te sirva como guia.
 
Última edición:
La funcion getdatosUsuario pertenece a una clase por lo que veo. la voy a incorporar a una clase mia..

Si la verdad no se porque no me funciona:
probe hacer un simple form, en action puse el index y un boton submit:

PHP:
<form class="form-horizontal" action="index.php" style="vertical-align: central;" method="post">
    <p>ACCESO AL SISTEMA</p>
  <div class="form-group">
  <div class="row">
    <label for="inputEmail3" class="col-sm-2 control-label">Nombre</label>
    <div class="col-sm-4">
      <input type="text" class="form-control" id="usuario" placeholder="USUARIO"/>
    </div>
    </div>
    <div class="row">
      <label for="inputEmail3" class="col-sm-2 control-label">Contraseña</label>
    <div class="col-sm-4">
      <input type="text" class="form-control" id="pass" placeholder="PASS"/>
    </div>
    </div>
  </div>
  
  <input type="submit" class="btn btn-info btn-lg" value="ENTRAR"/>
     
 

     
</form>

Luego toda la consulta en el index:
PHP:
session_start();
require_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/includes/claseConexion.php');
function User($usuario,$pass)
	{
		try
		{
	
            $conexion = Conexion::singleton_conexion();
			

			$stm=$conexion->prepare("SELECT * FROM despensa.usuarios WHERE nombre='".$usuario."' AND pass='".$pass."';");
		      
              $stm->execute();
           $array=$stm->fetchAll(PDO::FETCH_ASSOC);
   
     
  
			return $array;
         
		          
		}
		catch(Exception $e)
		{
			die($e->getMessage());
		}
	}
    $arraylog=User($_POST['usuario'],$_POST['pass']);
    if (count($arraylog)>0){
        $_SESSION['usuario']=$_POST['usuario'];
        }
        var_dump($_POST['usuario']);
require_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/routes.php');


if (isset($_SESSION['usuario'])){
    require_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/views/template.php');
if (isset($_REQUEST['id'])){
    $id=$_REQUEST['id'];

}else{
$id=0;}

	if (isset($_GET['controller'])&&isset($_GET['action'])) {
		$controller=$_GET['controller'];
		$action=$_GET['action'];
   
        call($controller,$action,$id);		
	}
}else{
    echo "no esta logueado en el sistema";
    call("login","index",0);
}
?>

Pero tampoco funciona

- - - Actualizado - - -

Ahora modifique nuevamente, dado que tenia usuario y pass como id y no como name en html, por lo que php no lo tomaba:

PHP:
<?php
session_start();
require_once ("C:\\xampp\htdocs\gestionweb\models\claseLogin.php");


    $U1=new Login();
    $usuario=$_POST['usuario'];
    $pass=$_POST['pass'];
    $arrayu=$U1->User($usuario,$pass);
   
         if (count($arrayu)>1){ 
            
                foreach ($arrayu as $n){
           

         
            $_SESSION['usuario']=$n['nombre']; 
            $_SESSION['idlog']=$n['iduser']; 
               
                }
  

            }
            
        header ("Location : ../index.php?controller=template&action=index");

?>

PHP:
<form class="form-horizontal" method="POST" style="vertical-align: central;" action="views/procesologin.php">
    <p>ACCESO AL SISTEMA</p>
  <div class="form-group">
  <div class="row">
    <label for="inputEmail3" class="col-sm-2 control-label">Nombre</label>
    <div class="col-sm-4">
      <input type="text" class="form-control" name="usuario" placeholder="USUARIO"/>
    </div>
    </div>
    <div class="row">
      <label for="inputEmail3" class="col-sm-2 control-label">Contraseña</label>
    <div class="col-sm-4">
      <input type="text" class="form-control" name="pass" placeholder="PASS"/>
    </div>
    </div>
  </div>
  
  <input type="submit" value="guardar"/>
     

</form>

Y obtengo error 500: ¡Error del servidor!

Se ha producido un error interno en el servidor y no se ha podido completar su solicitud. Se ha producido un error interno en el servidor y no se ha podido completar su solicitud. O el servidor está sobrecargado o ha habido un fallo en la ejecución de un programa CGI.

Si usted cree que esto es un error del servidor, por favor comuníqueselo al administrador del portal.

- - - Actualizado - - -

Si pongo que redirija a articulo index me abre el catalogo de productos perfectamente, pero no s eve el menu principal que es lo que esta en template, osea no entiendo porque la portada no se puede ver..
 
te hago un ejemplo y te paso, estoy por llegar a mi casa (son las 20hs aprox).
 
error.webp

Ahi apareces con status 200 el index que tiene como parametro controller=template y action=index, en la barra de direcciones tambien aparece:

Es decir este codigo funciona perfecto:
Insertar CODE, HTML o PHP:
      success: function(data){
                console.log(data);
       if (data.length==0){
        alert('login incorrecto');
       window.location.href ='index.php';
       }else if (data.length==1){
     console.log(data.length);
       window.location.href ='index.php?controller=template&action=index';
   
       }
pero no entiendo porque vuelve a la pantalla de login, por eso pienso que no conserva la sesion:
PHP:
<?php
session_start();
require_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/routes.php');


if (isset($_SESSION['usuario'])){
var_dump($_SESSION);

	   call("template","index",0); 
	
}else{
    var_dump($_SESSION);
    echo "no esta logueado en el sistema";
    call("login","index",0);
}
?>
 
Aun no termine el ejemplo que te comente, pero puedes guiarte por este articulo

Insertar CODE, HTML o PHP:
https://www.bloguero-ec.com/publicacion/login-php-mysql-con-jquery-y-ajax-para-web
 
Aun no termine el ejemplo que te comente, pero puedes guiarte por este articulo

Insertar CODE, HTML o PHP:
https://www.bloguero-ec.com/publicacion/login-php-mysql-con-jquery-y-ajax-para-web

ok, estoy probando ese ejemplo

- - - Actualizado - - -

Ese ejemplo me funcion perfecto!, me falta en lugar de mostrar el logout redirigir a template al index.
 
Osea me dice la pagina no esta siendo redireccionada correctamente..probe con la instruccion header de php..porque con la href de jquery me queda la pagina en blanco
 
Atrás
Arriba