Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: gAb1 en 20 Septiembre 2014, 18:50 pm



Título: obtener id login de session
Publicado por: gAb1 en 20 Septiembre 2014, 18:50 pm
Hola, necesito obtener el user_id del login actual para usarlo en una pagina.

Esta es la función que utilizo para el login:

Código
  1. function login($email, $password, $mysqli) {
  2.    // Using prepared statements means that SQL injection is not possible.
  3.    if ($stmt = $mysqli->prepare("SELECT id, username, password, salt
  4.        FROM members
  5.       WHERE email = ?
  6.        LIMIT 1")) {
  7.        $stmt->bind_param('s', $email);  // Bind "$email" to parameter.
  8.        $stmt->execute();    // Execute the prepared query.
  9.        $stmt->store_result();
  10.  
  11.        // get variables from result.
  12.        $stmt->bind_result($user_id, $username, $db_password, $salt);
  13.        $stmt->fetch();
  14.  
  15.        // hash the password with the unique salt.
  16.        $password = hash('sha512', $password . $salt);
  17.        if ($stmt->num_rows == 1) {
  18.            // If the user exists we check if the account is locked
  19.            // from too many login attempts
  20.  
  21.            if (checkbrute($user_id, $mysqli) == true) {
  22.                // Account is locked
  23.                // Send an email to user saying their account is locked
  24.                return false;
  25.            } else {
  26.                // Check if the password in the database matches
  27.                // the password the user submitted.
  28.                if ($db_password == $password) {
  29.                    // Password is correct!
  30.                    // Get the user-agent string of the user.
  31.                    $user_browser = $_SERVER['HTTP_USER_AGENT'];
  32.                    // XSS protection as we might print this value
  33.                    $user_id = preg_replace("/[^0-9]+/", "", $user_id);
  34.                    $_SESSION['user_id'] = $user_id;
  35.                    // XSS protection as we might print this value
  36.                    $username = preg_replace("/[^a-zA-Z0-9_\-]+/",
  37.                                                                "",
  38.                                                                $username);
  39.                    $_SESSION['username'] = $username;
  40.                    $_SESSION['login_string'] = hash('sha512',
  41.                              $password . $user_browser);
  42.                    // Login successful.
  43.                    return true;
  44.                } else {
  45.                    // Password is not correct
  46.                    // We record this attempt in the database
  47.                    $now = time();
  48.                    $mysqli->query("INSERT INTO login_attempts(user_id, time)
  49.                                    VALUES ('$user_id', '$now')");
  50.                    return false;
  51.                }
  52.            }
  53.        } else {
  54.            // No user exists.
  55.            return false;
  56.        }
  57.    }
  58. }

¿Como podria usar el id en otra pagina?

Gracias!


Título: Re: obtener id login de session
Publicado por: T. Collins en 20 Septiembre 2014, 19:16 pm
Si utilizas
Código

en la otra página, tendrás las variables $_SESSION


Título: Re: obtener id login de session
Publicado por: gAb1 en 20 Septiembre 2014, 19:51 pm
Sabes que quiere decir:

Citar
Notice: Array to string conversion in...

Asi es como lo tengo:
Código
  1. <?php
  2.  
  3. include_once 'includes/db_connect.php';
  4. include_once 'includes/functions.php';
  5.  
  6. sec_session_start();
  7.  
  8. $connectedUserID = $_SESSION['userID'];
  9.  
  10. $stmt = $mysqli->prepare("SELECT rc_usuario.*, rc_referidos.*
  11. FROM rc_referidos
  12. INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_referidos.idReferido
  13. WHERE rc_referidos.idRedComercio2 = '$connectedUserID'");
  14.  
  15. $stmt->execute();
  16. $stmt->store_result();
  17.  
  18. while ($stmt->fetch()) {
  19. $stmt['idUsuario'];
  20. $stmt['nombre'];
  21. $stmt['apellidos'];
  22. $stmt['status'];

¿Ves algún fallo? ¿el while y la forma de declarar ids esta bien?

Gracias!


Título: Re: obtener id login de session
Publicado por: MinusFour en 20 Septiembre 2014, 20:00 pm
Tus variables $_SESSION[] no concuerdan. En uno tienes userID y en el otro user_id. Por cierto, no se hace mencion a la funcion sec_session_start en ningun lado. (session_start() debe estar presente en los dos scripts a menos que uno incluya al otro)


Título: Re: obtener id login de session
Publicado por: gAb1 en 20 Septiembre 2014, 20:10 pm
Arreglado, gracias. sec_session_start es una funcion de functions.php

Ahora me da un error que antes no me daba...

Citar
Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\referral.php on line 22

la linea 22 es precisamente:

Código
  1. $stmt->execute();


Título: Re: obtener id login de session
Publicado por: MinusFour en 20 Septiembre 2014, 20:24 pm
Lo más probable es que el prepare haya fallado y haya devuelto FALSE.

Citar
mysqli_prepare() returns a statement object or FALSE if an error occurred.

Agrega antes del $stmt->execute :

Código
  1. if(!$stmt){
  2. echo $mysqli->error;
  3. }

Por cierto deberías utilizar los parametros para evitar SQLi.

Código
  1. $stmt = $mysqli->prepare("SELECT rc_usuario.*, rc_referidos.*
  2. FROM rc_referidos
  3. INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_referidos.idReferido
  4. WHERE rc_referidos.idRedComercio2 = ?");
  5. $stmt->bind_param('s', $connectedUserID);




Título: Re: obtener id login de session
Publicado por: gAb1 en 20 Septiembre 2014, 21:03 pm
Citar
Fatal error: Cannot use object of type mysqli_stmt as array in C:\xampp\htdocs\referral.php on line 45

Por usar:

Código
  1. $stmt['idUsuario'];

¿Cual es la forma correcta? ¿Y para imprimirlos entre etiquetas html?

Código
  1. echo'<li><a>'.$stmt['idUsuario'].'</a></li>';

Gracias.


Título: Re: obtener id login de session
Publicado por: MinusFour en 20 Septiembre 2014, 21:33 pm
Código
  1. $stmt->execute(); //Executa la sentencia
  2. $result = $stmt->get_result(); //Regresa un objeto tipo mysqli_result
  3. while($row = $result->fetch_array()){
  4.  $row['idUsuario']; //Columna idUsuario
  5. }


Título: Re: obtener id login de session
Publicado por: gAb1 en 20 Septiembre 2014, 23:54 pm
Muchas gracias ahora funciona todo perfectamente.