miércoles, 22 de mayo de 2013

Inicio de sesión seguro php

Una variable de sesión PHP se utiliza para almacenar información acerca de, o cambiar la configuración de una sesión de usuario. Las variables de sesión contienen información acerca de un solo usuario, y están disponibles para todas las páginas en una sola aplicación.

PHP variables de sesión

Cuando se trabaja con una aplicación, se abre, hacer algunos cambios y luego se cierra. Esto es muy parecido a una sesión. El equipo sabe lo que eres. Se sabe cuando se inicia la aplicación y cuando se termina. Pero en Internet hay un problema: el servidor web no sabe quién eres y lo que haces porque la dirección HTTP no mantiene estado.

Una sesión de PHP soluciona este problema que le permite almacenar la información del usuario en el servidor para su uso posterior (por ejemplo, nombre de usuario, artículos de compra, etc.) Sin embargo, la información de sesión es temporal y se eliminará después de que el usuario ha abandonado el sitio web. Si usted necesita un almacenamiento permanente es posible que desee almacenar los datos en una base de datos.

Sesiones de trabajo mediante la creación de una identificación única (UID) para cada visitante y variables de tiendas basado en este UID. El UID se almacena en una cookie o se propaga en la URL.

Inicio de una sesión PHP

<?php
session_start();
?>

A continuación los script para el inicio de sesión seguro en php.

login.php contiene el formulario de recepción de datos para el inicio de sesión.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Inicio de sesi&oacute;on</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- styles -->
    <link href="./assets/css/bootstrap.css" rel="stylesheet">
    <link href="./assets/css/login.css" rel="stylesheet">
    <link href="./assets/css/bootstrap-responsive.css" rel="stylesheet">
    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src="../assets/js/html5shiv.js"></script>
    <![endif]-->
    <!-- Fav and touch icons -->
<link rel="shortcut icon" href="./assets/ico/favicon.ico">
  </head>
  <body>
    <div class="container">
      <form class="form-signin" action="logeo.php" method="post">
        <h3 class="form-signin-heading">Por favor, identif&iacute;quese</h3>
        <input type="text" name="usuario" id="usuario" class="input-block-level" placeholder="Usuario" required autofocus >
        <input type="password" name="password" id="password" class="input-block-level" placeholder="Contrase&ntilde;a" required>
        <button class="btn btn-large btn-primary" type="submit">Entrar</button>
      </form>
    </div> <!-- /container -->
  </body>
</html> 

logeo.php contiene el script que procesa los datos de inicio de sesión.

<?php
/* Llamar a Cadena de Conexion*/ 
include ("functionConect.php");
conectar();
if($_POST && !empty($_POST['usuario']) &&  !empty($_POST['password']) ) 
{
//quitamos el posible SQLInjection del usuario
$usuario = mysql_real_escape_string($_POST['usuario']);  
//sacamos el hash del password para que se compare ya encriptado
$password = md5(mysql_real_escape_string($_POST['password']));
//vemos si existen registros que coincidan
$query = mysql_query("SELECT * FROM user ".
"WHERE username  = '{$usuario}' AND ".
"password = '{$password}' and status='1' ");
if(mysql_num_rows($query) == 1) 
{
session_start();
           $_SESSION['login'] = $usuario;
           //generamos un token aleatorio para el usuario
          $_SESSION['token'] = md5(rand().$_SESSION['login']);

           //actualizamos el token para qu sean iguales el de la db
           //y el de la sesión
           mysql_query("UPDATE user SET ".
           "token= '{$_SESSION['token']}' WHERE ".
           "username = '{$_SESSION['login']}'");
           
           //todo bien
           header("Location: .index.php");
           exit;

else {
//Destruimos la Sesion
Session_Start();
unset($_SESSION["login"]);
      header("Location: login.php");  
     }
}
else
{
//Si hay campos vacios redirecciono
header("Location: login.php");
}
?>
archivo functionConect.php, contiene los datos de conexión a la base de datos mysql
<?php 
function conectar()
{
$server=DB_HOSTNAME;//aqui va el nombre del servidor.
$user=DB_USERNAME;//nombre de usuario mysql del servidor. 
$pass=DB_PASSWORD;//contraseña del usuario mysql. 
$DB=DB_DATABASE;//nombre de la base de datos.
if (!$conexion=mysql_connect($server,$user,$pass))
{
echo "Error al conectar a la base de datos ".mysql_error();
exit();
}
 if (!@mysql_select_db($DB,$conexion)) 
{
  echo "Error al seleccionar la base de datos ".mysql_error();
  exit();
}
}
?>
<?php
echo "Usuario autorizado";
?>


13 comentarios:

  1. Todos los archivos del código fuente serán compartido mediante email: escribeme joaquinobed@gmail.com

    ResponderEliminar
  2. Hola, yo lo he echo y solo me deja escribir el usuario y la contraseña y luego darle a entrar, pero no hay ninguna opción donde registrarse primero!!

    ResponderEliminar
  3. Tienes toda la razón Angie, Solo permite autenticarse pero no registrarse, Habría que colocar un enlace que nos lleve al formulario de registro.

    ResponderEliminar
  4. hola te envie una consulta por email espero puedas ayudarme de todos modos dejo mi correo alejandro86.mer@gmail.com

    ResponderEliminar
  5. Hola. me podrias facilitar el codigo completo, Gracias fperaza.rf@gmail.com

    ResponderEliminar
  6. Hola. Me puedes ennviar el codigo.? Gracias

    ResponderEliminar
    Respuestas
    1. Sigue el siguiente enlace para descargar https://mega.co.nz/#!1slD3D6B!_vkQ2eqscVyoS9hgu4HBSs6J8uIYC2oC39BeNZikeCQ

      Eliminar
  7. compadre muchas gracias por este gran aporte que has hecho. nos es de gran ayuda a nosotros que estamos partiendo en este mundo del desarrollo.

    ResponderEliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  9. Gracias bro por tu aporte, me ha sido muy util, solo que tengo un inconveniente, y es que a la hora de iniciar sesión no me conecta con la base de datos, espero me respondas.

    ResponderEliminar
    Respuestas
    1. Si descargaste los archivos de este tutorial. Hay un carperta que se llama datos, la cual contiene un archivo llamado functionConect.php, debes editarlo y cambiar los datos de conexion:

      Eliminar