Sistemas Web
  • Inicio
  • Sobre Mí
  • Scripts PHP
  • Servicios
  • Portafolio
  • Cursos
  • Blog
  • Contáctanos
  • Inicio
  • Sobre Mí
  • Scripts PHP
  • Servicios
  • Portafolio
  • Cursos
  • Blog
  • Contáctanos

Blog

  • Home
  • Mysql / Inicio de Sesión seguro y Registro de Usuarios usando PHP, MySQLi, jQuery y Bootstrap

Inicio de Sesión seguro y Registro de Usuarios usando PHP, MySQLi, jQuery y Bootstrap

  • Publicado el 22 Jun 2015
  • Por obed
  • En Mysql, PHP

inicio_sesion_seguro

En este tutorial vamos a ver un simple registro de usuarios e  inicio de sesión con la opción de restablecer la contraseña en caso de que el usuario la haya olvidado, usaremos programación orientada a objetos con PHP5, MySQLi, jQuery y Bootstrap. Además el sistema incluye una serie de plantillas para mostrar después que el usuario haya iniciado sesión, dichas páginas son (home.php, info.php, header.php, footer.php y account.php).

Paso 1:

Crear la base de datos y la tabla de ejemplo para este tutorial con la siguientes consultas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--
-- Database: `login`
--
CREATE DATABASE IF NOT EXISTS `login` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `login`;
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(60) NOT NULL,
  `password` varchar(60) NOT NULL,
  `social_id` varchar(100) NOT NULL,
  `picture` varchar(250) NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`),
  KEY `email` (`email`),
  KEY `login` (`password`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Paso 2:

Crear archivo config.php y definir información de configuración generales relacionados en el mismo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require_once 'messages.php';
 
define( 'BASE_PATH', 'http://localhost/login/');//Ruta base donde se encuentra
define( 'DB_HOST', 'localhost' );//Servidor de la base de datos
define( 'DB_USERNAME', 'root');//Usuario de la base de datos
define( 'DB_PASSWORD', 'root');//Contraseña de la base de datos
define( 'DB_NAME', 'login');//Nombre de la base de datos
 
function __autoload($class)
{
$parts = explode('_', $class);
$path = implode(DIRECTORY_SEPARATOR,$parts);
require_once $path . '.php';
}

En donde __autoload() es una de las mágicas funciones de PHP5. Si quieres usar las mismas clases en otros archivos php,  debes incluir el archivo de la clase usando  require_once o include_once para usar las funciones de esa clase.

Ahora crear el archivo messages.php, que tendrá todos los mensaje de éxito así como de error.

1
2
3
4
5
6
7
8
9
10
11
<?php
define('FIELDS_MISSING', 'Algunos campos faltan');
define('PASSWORD_NOT_MATCH', 'Las contraseñas no coinciden');
define('USER_REGISTRATION_FAIL', 'Registro de usuarios falló');
define('USER_REGISTRATION_SUCCESS', 'Registro de usuario se ha realizado correctamente , puede iniciar sesión ahora');
 
 
define('LOGIN_FIELDS_MISSING', 'Correo electrónico y contraseña faltan');
define('LOGIN_FAIL', 'Correo electrónico y/o Contraseña no coinciden');
 
define('PASSOWRD_CHANAGE_SUCCESS', 'Contraseña cambiada con éxito.');

Ahora cree DBclass.php y crear DBclass en ella.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class Cl_DBclass
{
/**
* @var $con llevará a cabo la conexión de base de datos
*/
public $con;
/**
* Esto creará la conexión de base de datos
*/
public function __construct()
{
$this->con = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
if( mysqli_connect_error()) echo "Falló conexión a MySQL: " . mysqli_connect_error();
}
}

Paso 3:

Crear archivo User.php, que va a manejar todos las funcionalidades lógicas. mientras va a guardar los datos en la base de datos que es valida los datos, una vez que pasen validación entonces guarda los datos enviados a la base de datos. Si falla la validación que entonces envía  la Excepción de error.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<?php
class Cl_User
{
/**
* @var va a contener la conexión de base de datos
*/
protected $_con;
/**
* Inializar DBclass
*/
public function __construct()
{
$db = new Cl_DBclass();
$this->_con = $db->con;
}
/**
* Registro de usuarios
* @param array $data
  */
public function registration( array $data )
{
if( !empty( $data ) ){
// Trim todos los datos entrantes:
$trimmed_data = array_map('trim', $data);
// escapar de las variables para la seguridad
$name = mysqli_real_escape_string( $this->_con, $trimmed_data['name'] );
$password = mysqli_real_escape_string( $this->_con, $trimmed_data['password'] );
$cpassword = mysqli_real_escape_string( $this->_con, $trimmed_data['confirm_password'] );
// Verifica la direccion de correo electrónico:
if (filter_var( $trimmed_data['email'], FILTER_VALIDATE_EMAIL)) {
$email = mysqli_real_escape_string( $this->_con, $trimmed_data['email']);
} else {
throw new Exception( "Por favor, introduce una dirección de correo electrónico válida!" );
}
if((!$name) || (!$email) || (!$password) || (!$cpassword) ) {
throw new Exception( FIELDS_MISSING );
}
if ($password !== $cpassword) {
throw new Exception( PASSWORD_NOT_MATCH );
}
$password = md5( $password );
$query = "INSERT INTO users (user_id, name, email, password, created) VALUES (NULL, '$name', '$email', '$password', CURRENT_TIMESTAMP)";
if(mysqli_query($this->_con, $query)){
mysqli_close($this->_con);
return true;
};
} else{
throw new Exception( USER_REGISTRATION_FAIL );
}
}
/**
* Este metodo para iniciar sesión
* @param array $data
* @return retorna falso o verdadero
*/
public function login( array $data )
{
$_SESSION['logged_in'] = false;
if( !empty( $data ) ){
// Trim todos los datos entrantes:
$trimmed_data = array_map('trim', $data);
// escapar de las variables para la seguridad
$email = mysqli_real_escape_string( $this->_con,  $trimmed_data['email'] );
$password = mysqli_real_escape_string( $this->_con,  $trimmed_data['password'] );
if((!$email) || (!$password) ) {
throw new Exception( LOGIN_FIELDS_MISSING );
}
$password = md5( $password );
$query = "SELECT user_id, name, email, created FROM users where email = '$email' and password = '$password' ";
$result = mysqli_query($this->_con, $query);
$data = mysqli_fetch_assoc($result);
$count = mysqli_num_rows($result);
mysqli_close($this->_con);
if( $count == 1){
$_SESSION = $data;
$_SESSION['logged_in'] = true;
return true;
}else{
throw new Exception( LOGIN_FAIL );
}
} else{
throw new Exception( LOGIN_FIELDS_MISSING );
}
}
/**
* El siguiente metodo para verificar los datos de la cuenta para el cambio de contraseña
* @param array $data
* @throws Exception
* @return boolean
*/
public function account( array $data )
{
if( !empty( $data ) ){
// Trim todos los datos entrantes:
$trimmed_data = array_map('trim', $data);
// escapar de las variables para la seguridad
$password = mysqli_real_escape_string( $this->_con, $trimmed_data['password'] );
$cpassword = $trimmed_data['confirm_password'];
$user_id = mysqli_real_escape_string( $this->_con, $trimmed_data['user_id'] );
if((!$password) || (!$cpassword) ) {
throw new Exception( FIELDS_MISSING );
}
if ($password !== $cpassword) {
throw new Exception( PASSWORD_NOT_MATCH );
}
$password = md5( $password );
$query = "UPDATE users SET password = '$password' WHERE user_id = '$user_id'";
if(mysqli_query($this->_con, $query)){
mysqli_close($this->_con);
return true;
}
} else{
throw new Exception( FIELDS_MISSING );
}
}
/**
* Este metodo para cerrar las sesión
*/
public function logout()
{
session_unset();
session_destroy();
header('Location: index.php');
}
/**
* Esto restablece la contraseña actual y la nueva contraseña para enviar correo
* @param array $data
* @throws Exception
* @return boolean
*/
public function forgetPassword( array $data )
{
if( !empty( $data ) ){
// escapar de las variables para la seguridad
$email = mysqli_real_escape_string( $this->_con, trim( $data['email'] ) );
if((!$email) ) {
throw new Exception( FIELDS_MISSING );
}
$password = $this->randomPassword();
$password1 = md5( $password );
$query = "UPDATE users SET password = '$password1' WHERE email = '$email'";
if(mysqli_query($this->_con, $query)){
mysqli_close($this->_con);
$to = $email;
$subject = "Nueva solicitud de contraseña";
$txt = "Su nueva contraseña ".$password;
$headers = "From: admin@obedalvarado.pw" . "rn" .
"CC: admin@obedalvarado.pw";
mail($to,$subject,$txt,$headers);
return true;
}
} else{
throw new Exception( FIELDS_MISSING );
}
}
/**
* Esto generará una contraseña aleatoria
* @return string
*/
private function randomPassword() {
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
$pass = array(); //recuerde que debe declarar $pass como un array
$alphaLength = strlen($alphabet) - 1; //poner la longitud -1 en caché
for ($i = 0; $i < 8; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
return implode($pass); //convertir el array en una cadena
}
}

Bueno esa sería la configuración básica para hacer funcionar el Script de Registro de Usuarios a la Base de Datos e Inicio de Sesión al Sistema.

 Descargar archivos

También te puede interesar:

Cómo Importar una Base de Datos Grande en Windows con MySQL

Cómo trabajar con fechas y horas en PHP

Crea una calculadora de interés compuesto mensual con PHP

  • Autocompletar direcciones usando la API de Google
  • Plantillas de Administración Bootstrap Gratis
  • Buscar

    Suscríbete a nuestro boletín de noticias

    Categorías

    • Aplicaciones móviles (1)
    • Bootstrap (52)
    • Cursos (23)
    • Excel (3)
    • Hosting dedicado (2)
    • Impuestos (1)
    • JavaScript (1)
    • Jquery (26)
    • Mysql (56)
    • off topic (1)
    • PHP (91)
    • sistemas de administración (6)
    • Tutoriales (40)

    Entradas recientes

    • Cómo Importar una Base de Datos Grande en Windows con MySQL
    • Cómo trabajar con fechas y horas en PHP
    • Crea una calculadora de interés compuesto mensual con PHP
    • Calculadora de amortización de préstamos con PHP
    • Enviar solicitudes GET y POST con Fetch API de JavaScript

    Sobre Mi

    Obed Alvarado

    Obed Alvarado
    Desarrollador Web
    Fundador de: Sistemas Web
    Escríbeme a: info@obedalvarado.pw

    Productos

    • Sistema de inventario
    • Sistema de cotizaciones
    • Catálogo web de productos
    • Sistema de ordenes de trabajo
    • Sistema de gastos e ingresos

    Enlaces importantes

    • Portafolio
    • Servicios
    • Política de reembolsos
    • Política de privacidad
    © 2015 - 2022 Obed Alvarado. All Rights Reserved.