PHP - abrir session

 
Vista:
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 08/08/2020 21:37:29
tengo este codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public function validar()
{
 
    $nombres=$_POST["nombres"];
    $username=$_POST["correo"];
    $pass=$_POST["pass"];
    $sql="select * from usuario where cta_correo='$username' and usuario_pass='$pass'";
    echo $sql;
       $res=pg_query(Conectar::con(),$sql);
       if (pg_num_rows($res)==0)
       {
        echo "<script type='text/javascript'>
        alert('La cuenta de Correo o la Contraseña no son Correctos o no Existen. Debe Registrarse.');
        window.location='solicitud.php';
        </script>";
       }
       else
       {
        if ($reg=pg_fetch_array($res))
         {
         	session_start();
            $_SESSION["session_mante"]=$reg["idusuario"];
                $nombres=$_POST["nombres"];
           ?>
              <script type='text/javascript'>
              	window.location='fichaactual.php?correo=<?php echo $username?>&pass=$pass&nombresf=<?php echo $nombres?>';
                </script>
           <?php
         }
       }
}

con el cual debe el usuario abrir session despues del ELSE, necesito obtener el nombre del usuario para pasarlo al formulario fichaactual.php es aceptable hacer esto:
1
$_SESSION["session_mante"]=$reg["nombres"];
? Estoy intentando pasar la variable nombre pero ya no se como hacer esto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por joel (1269 intervenciones) el 09/08/2020 11:56:17
Hola Zendi, si, si es correcto hacer esto:
1
$_SESSION["session_mante"]=$reg["nombres"];

Que problema tienes? que no guarda el valor?

ten en cuenta que lo ejecutas dentro de un bucle, por lo que tendrá siempre el ultimo valor

el session_start() es importante que este al inicio del archivo... antes que nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por javier (547 intervenciones) el 09/08/2020 21:03:35
Hola

no esta ejecutando ningun bucle, y creo que lo que quiere hacer no esta bien por que sobreescribe el valor de la variable de sesion

$_SESSION['session_mante'];

Puedes almacenar las variables de sesion que quieras zendi, con los datos que quieras, llamalas deiferente.

session_start(); es aconsejable ponerlo arriba, en este caso interpreto que no quiere iniciar sesion hasta saber si el user esta registrado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public function validar()
{
 
    $nombres=$_POST["nombres"];
    $username=$_POST["correo"];
    $pass=$_POST["pass"];
    $sql="select * from usuario where cta_correo='$username' and usuario_pass='$pass'";
    echo $sql;
       $res=pg_query(Conectar::con(),$sql);
       if (pg_num_rows($res)==0)
       {
        echo "<script type='text/javascript'>
        alert('La cuenta de Correo o la Contraseña no son Correctos o no Existen. Debe Registrarse.');
        window.location='solicitud.php';
        </script>";
       }
       else
       {
        if ($reg=pg_fetch_array($res))
         {
         	session_start();
            $_SESSION["session_mante"]=$reg["idusuario"];
            $_SESSION["session_nombres"] = $reg["nombres"];
            $_SESSION["session_username"] = $reg["cta_correo"];
                //$nombres=$_POST["nombres"];
           ?>
              <script type='text/javascript'>
              	window.location='fichaactual.php?correo=<?php echo $username?>&pass=$pass&nombresf=<?php echo $nombres?>';
                </script>
           <?php
         }
       }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 09/08/2020 21:17:36
Hola lo pondre en practica y les avisare del resultado, gracias por su ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 09/08/2020 23:20:35
hola Javier,
y que variables debo tomar de esta linea de codigo

1
2
3
4
5
$_SESSION["session_mante"]=$reg["idusuario"];
 
$_SESSION["session_nombres"] = $reg["nombres"];
 
$_SESSION["session_username"] = $reg["cta_correo"];

para asignarlas a la llamada del formulario
1
window.location='fichaactual.php?correo=<?php echo $username?>&pass=$pass&nombresf=<?php echo $nombres?>';
?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por javier (547 intervenciones) el 10/08/2020 09:06:31
Ya no te hace falta montar todo ese enlace y pasar las variables por el metodo GET que es muy inseguro para este tipo de datos
lo mejor es hacerlo por sesiones, mucho mas dificiles de manipular por un usuario malintencionado.
con el metodo GET las variables se capturan en el enlace del navegador
con las sessiones estan ocultas

ahora ya son de sesion, el enlace lo dejas asi:

1
window.location='fichaactual.php'

y en la pagina fichaactual.php recuperas las variables asi:

1
2
3
4
session_start();
$id_usuario = $_SESSION['session_mante'];
$nombres = $_SESSION['session_nombres'];
$email = $_SESSION['session_username'];

y lo de que no guarda el valor

solo puede ser por dos cosas

una que no has abierto sesion

dos, que la variable este vacia, por lo que no se guarda nada en la de sesion.

Las variables de sesion se pueden usar desde el momento que se abre sesion sin problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 10/08/2020 17:30:05
Javier gracias lo pondre en practica y a cualquier duda volvere por aqui.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 12/08/2020 17:08:18
Hola Javier funciono, gracias.
Ahora bien quedo listo esto, ahora te pregunto: como hago para crear el usuario por primera vez y que abra la session utilizando el formulario fichaactual.php? En lo anterior es cuando se loguea para entrar a la aplicacion. Que me sugieres creo el usuario y lo envio para que busque su contraseña a su correo? o Creo otro formulario indicando su nombre? Es decir otro Formulario que no sea fichaactual.php.


Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por javier (547 intervenciones) el 12/08/2020 20:50:38
Hola,

todo el codigo que has puesto, es muy inseguro a atques SQLinjection, cualquiera podria hacerse con tu base de datos tal cual manejas las variables y haces la consulta a la BBDD sin limpiar las variables antes, hay que programar con un minimo de seguridad. Nunca sabes lo que un usuario mal intencionado puede poner en un input de un formulario tuyo que despues, va tal, cual a la BBDD.

solo habria que poner algo parecido a esto en el imput de tu password (con cualquier user, da igual)

1
' or 1 = 1

para dejar tu sql en algo asi:

1
select * from usuario where cta_correo='$username' and usuario_pass='' or 1 = 1

que siemple se cumpliria y por lo tanto siempre podria logearme si ser usuario registrado

mirate estos enlaces:

sistema registro y login;

https://programacion.net/articulo/sistema_de_login_php_con_pdo_1467

sanitizar variables

https://www.php.net/manual/es/filter.filters.sanitize.php

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 13/08/2020 16:04:01
Hola, estoy revisando los enlaces que me sugieres,

y tengo esta conexion:

1
2
3
4
5
6
7
8
9
10
11
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
session_start();
class Conectar
{
	public static function con()
	{
       $conexion = "host=localhost port=5432 dbname=mantenimiento user=postgres password=1234";
       $connect = pg_connect($conexion);
	   return $connect;
	}
}

y lo que quieres decirme que con esto no basta y es inseguro?
Nota:La contraseña es ficticia

y me sugieres este para la conexion, pero yo trabajo con PostgreSql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
session_start();
/* DATABASE CONFIGURATION */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'databasename');
define("BASE_URL", "http://localhost/PHPLoginHash/"); // Eg. http://yourwebsite.com
 
 
function getDB()
{
$dbhost=DB_SERVER;
$dbuser=DB_USERNAME;
$dbpass=DB_PASSWORD;
$dbname=DB_DATABASE;
try {
$dbConnection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbConnection->exec("set names utf8");
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbConnection;
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
 
}
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por javier (547 intervenciones) el 13/08/2020 19:31:33
Genial,

Si usas PDO para conectar úsalo también para hacer las consultas preparadas usando bindparam, si no tu sistema es muy inseguro tal cual lo haces.
https://www.php.net/manual/es/pdostatement.bindparam

Da igual la base de datos, aquí la cuestión es el lenguaje SQL que es con el que te comunicas con tu BBDD.

Yo mínimo cifró la contraseña con un SALT y una clave que solo se yo a demás de almacenar en la BBDD del user dos datos que genero en el momento del login, que son la ID de sesion y una clave aleatoria etc, etc, etc a parte de usar bindparam y bindvalue y otros métodos para limpiar variables. Y asegurar las consultas a la BBDD que es primordial.

Sobre ataques SQL.

https://diego.com.es/ataques-sql-injection-en-php

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 14/08/2020 16:33:58
Hola Javier, bueno estoy tratando de aplicar tus sigerencias de acuerdo a los enlaces, pero como no estoy muy familiarizado con tal codigo ayudame a ajustarlo al codigo mio.

para PostgreSql tengo mi codigo de validacion de usuarios:
y estoy usando _pgexecute(); que es para postgre naturalmente. Y una vez que aprenda este metodo me sera mas facil.
pero me arroja este error:

1
Fatal error: Uncaught Error: Call to undefined function _pgexecute() in C:\xampp\htdocs\mantenimiento\conexion_mantenimiento.php:48 Stack trace: #0 C:\xampp\htdocs\mantenimiento\procesa_validar.php(4): Mantenimiento->validar() #1 {main} thrown in C:\xampp\htdocs\mantenimiento\conexion_mantenimiento.php on line 48

este codigo esta en una clase:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public function validar()
{
 
    $nombres=$_POST["nombres"];
    $username=$_POST["correo"];
    $pass=$_POST["pass"];
 
    $sql= _pgexecute("select * from usuario where cta_correo='$username' and usuario_pass='$pass'");
       $res=pg_query(Conectar::con(),$sql);
       if (pg_num_rows($res)==0)
       {
        echo "<script type='text/javascript'>
        alert('La cuenta de Correo o la Contraseña no son Correctos o no Existen. Debe Registrarse.');
        window.location='solicitud.php';
        </script>";
       }
       else
       {
        if ($reg=pg_fetch_array($res))
         {
         	session_start();
            $_SESSION["session_mante"]=$reg["idusuario"];
 
            $_SESSION["session_nombres"] = $reg["nombres"];
 
            $_SESSION["session_username"] = $reg["cta_correo"];
 
           ?>
              <script type='text/javascript'>
              	window.location='fichaactual.php';
                </script>
           <?php
         }
       }
}
y esta es la conexion:

1
2
3
4
5
6
7
8
9
class Conectar
{
	public static function con()
	{
       $conexion = "host=localhost port=5432 dbname=mantenimiento user=postgres password=1234";
       $connect = pg_connect($conexion);
	   return $connect;
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por javier (547 intervenciones) el 15/08/2020 08:45:26
Hola, te dice que no conoce la función _pgexecute, por que se escribe pg_execute
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 15/08/2020 17:43:56
Hola Javier disculpa mi insistencia, y tantas llamadas por este foro.
estoy aplicando de acuerdo a tus enlaces. Que error ves?

estoy usando este ejemplo:
1
$stmt = $pdo->prepare('SELECT * FROM usuarios WHERE nombre = :nombre');

coloque esta forma con prepare:
pero me da este error:

Fatal error: Uncaught Error: Call to undefined function prepare() in C:\xampp\htdocs\mantenimiento\conexion_mantenimiento.php:37 Stack trace: #0 C:\xampp\htdocs\mantenimiento\procesa_validar.php(4): Mantenimiento->validar() #1 {main} thrown in C:\xampp\htdocs\mantenimiento\conexion_mantenimiento.php on line 37
es decir ubica el error en la funcion prepare



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function validar()
{
 
echo $nombres=$_POST["nombres"];
$username=$_POST["correo"];
$pass=$_POST["pass"];
    $sql=prepare("select * from usuario where cta_correo='$username' and usuario_pass='$pass'");
       $res=pg_query(Conectar::con(),$sql);
       if (pg_num_rows($res)==0)
       {
        echo "<script type='text/javascript'>
        alert('La cuenta de Correo o la Contraseña no son Correctos o no Existen. Debe Registrarse.');
        window.location='solicitud.php';
        </script>";
       }
       }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

abrir session

Publicado por zendi (1056 intervenciones) el 09/08/2020 21:18:53
hola joel, exactamante no guarda el valor, lo revisare y te aviso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar