ProgramaciĆ³n, TecnologĆ­a y MĆ”s...

ProgramaciĆ³n, TecnologĆ­a y MĆ”s...

Inicio De Sesion Usando El Control Login Asp.Net

Buscando en Internet me he dado cuenta que existe poca informaciĆ³n(o al menos en espaƱol) de como usar el control login de asp.net con una base de datos propia.

De hecho la manera que les mostrare tambien puede ser usada creando nosotros mismos los controles de login.

El proyecto fue desarrollado usando Visual Estudio 2010 y SqlExpress.

La base de datos que usare para este ejemplo llamada Database y solo cuenta con una tabla usuarios y con los campos usuario y contraseƱa.

Bueno lo primero que aremos es crear un proyecto web vaciĆ³ con lenguaje de programaciĆ³n c# (esto ya lo tienen que saber hacer por eso no pongo imĆ”genes).

Una vez hecho esto se creara el proyecto con la pagina default y el archivo de configuraciĆ³n(web.config) en el cual agregaremos lo siguiente.










Lo primero seria la conexiĆ³n a la bd y en el segundo bloque estamos configurando para que todo el sitio este bajo una autentificaciĆ³n por medio de forms.
TambiƩn establecemos cual sera la pagina por defecto y cual la de login, de esta manera si el usuario no esta logueado se redirecciona a la pagina de login.

Una ves que hayamos hecho esto lo anterior, agregaremos una clase a nuestro proyecto llamada Autentificacion.cs

clase

Y el cĆ³digo que tendrĆ” nuestra clase sera el siguiente.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;

public static class Autentificacion
{
public static bool Autenticar(string usuario, string password)
{
    //consulta a la base de datos
    string sql = @"SELECT COUNT(*)
                          FROM Usuarios
                          WHERE usuario = @user AND contraseƱa = @pass";
    //cadena conexion
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
    {
        conn.Open();//abrimos conexion

        SqlCommand cmd = new SqlCommand(sql,conn); //ejecutamos la instruccion
        cmd.Parameters.AddWithValue("@user", usuario); //enviamos los parametros
        cmd.Parameters.AddWithValue("@pass", password);

        int count = Convert.ToInt32(cmd.ExecuteScalar()); //devuelve la fila afectada
    
        if (count == 0)
            return false;
        else
            return true;

    }
}

}

Como pueden observar lo Ćŗnico que se hace es crear un mĆ©todo estĆ”tico de tipo bool que hace la validaciĆ³n del usuario y devuelve false si no se autentifico y true si se autentifico correctamente.

Ahora lo que aremos es agregar un nuevo web form al cual llamaremos login y dentro de el ponemos el control login.

login

Ahora nos vamos al cĆ³digo de la pagina login y ponemos lo siguiente.
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    if (Autentificacion.Autenticar(Login1.UserName, Login1.Password))
    {
        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
   
    }
}

Lo que se hace es usar el evento Authenticate del control Login1 y dentro hacemos una validaciĆ³n de nuestro mĆ©todo Autenticar de la clase Autentificacion, pasandole como parĆ”metros los datos del control Login1, si la validaciĆ³n se hace correctamente lo redireccionamos a la pagina default.

Ahora en nuestra pagina default lo Ćŗnico que aremos es agregar un botĆ³n con el nombre btncerrar que lo Ćŗnico que ara es cerrar la autenticacion. nos vamos al cĆ³digo de nuestra pagina default y ponemos lo siguiente.
protected void Page_Load(object sender, EventArgs e)
{
    //si se autentica mostramos mensaje y nombre de usuario
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
        Response.Write("Bienvenido : " + User.Identity.Name);
    }
}
protected void btncerrar_Click(object sender, EventArgs e)
{
    //se borra la cookie de autenticacion
    FormsAuthentication.SignOut();

    //se redirecciona al usuario a la pagina de login
    Response.Redirect(Request.UrlReferrer.ToString());
}

Lo que se hace en este cĆ³digo es mostrar el mensaje bienvenido y el nombre del usuario autentificado en el evento load de la pagina, y luego en el evento del botĆ³n lo que se hace es cerrar el inicio de sesiĆ³n y redireccionarlo a la pagina de login nuevamente.

Importante que en los cĆ³digos cs de las paginas login y default tiene que ponerse el siguiente espacio de nombres al principio.
using System.Web.Security;


Eso seria todo si ejecutamos nuestro proyecto nos tendrĆ­a que funcionar.

login

default


Para probar el login el usuario es user y la contraseƱa 123.


 Y recuerden si necesitan una pagina web para su empresa, una aplicaciĆ³n web o de escritorio estamos a la orden pueden consultar  Mis Servicios


Si quieren donarme para una soda lo pueden hacer aqui.


Publicar un comentario

20 Comentarios

  1. Exclente pregunta si quiero validar que un usuario no este logeado en 2 maquinas diferentes

    ResponderEliminar
    Respuestas
    1. Lo que puedes hacer es agregar un campo bool a la tabla que usaras para el logueo y cuando el usuario haga el logueo puedes comprobar por medio de este campo si ya esta logueado o no.

      Saludos.

      Eliminar
  2. y en donde puedo agregar mas usuarios?
    o modificar la BD

    ResponderEliminar
    Respuestas
    1. Pues en la base de datos puedes agregar mas usuarios. Imagino que si estas desarrollando un proyecto tu tienes tu propia bd estructurada esto es solo un ejemplo de como hacer un login con tu propia bd.

      Saludos.

      Eliminar
  3. hola!!!
    me un error me dice que el codigo de usuario no controlo NullFererenceException

    ResponderEliminar
    Respuestas
    1. Pues que raro amigo yo lo he probado y no me da ningĆŗn error.
      En que parte del cĆ³digo te da el error y tenes sql server express instalado?

      Eliminar
  4. Esa base de datos la creaste dentro de visual studio o directamente en sql? Gracias por el aporte.

    ResponderEliminar
    Respuestas
    1. Pues como solo era para ejemplo y una bd sencilla la cree en el servicio de sql server que trae el visual studio, pero eso no importa la puedes crear en tu servidor local de sql server.

      Saludos.

      Eliminar
  5. En la parte del archivo de configuraciĆ³n (WebConfig) Para colocar ese cĆ³digo debo de eliminar el que trae por defecto? o en que parte lo colocarĆ­a?

    ResponderEliminar
  6. Pero dentro de que etiqueta? Porque hay varias.

    ResponderEliminar
  7. Me da un error en el web confing. Dice que el elemento system.web tiene una etiqueta secundaria no valida. El codigo completo es asĆ­:
















    ResponderEliminar
    Respuestas
    1. Hola.

      Pon una captura del cĆ³digo porque no se ve.

      Otra cosa no has descargado el proyecto de este ejemplo para que analices el cĆ³digo.

      Eliminar
  8. hola disculpe en que parte del codigo cierras tu conexion!!! por que se habre como tal pero no veo en donde cierra y me marca un error indicandome que la conexion sigue abierta!!! gracias!!

    ResponderEliminar
  9. Hola.

    Si te fijas en el mĆ©todo Autenticar para la obtener la cadena de conexiĆ³n uso los bloques using.

    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
    {
    conn.Open();

    }

    Cuando se utiliza el bloque using para la cadena de conexiĆ³n no se necesita cerrarla ya que al final del bloque del codigo la conexion se cierra sola, por eso no la cierro.

    Seguro en alguna parte del codigo has dejado tu abierta la conexion por eso recomiendo que uses el bloque using{} para abrir la cadena de conexion.

    Saludos.

    ResponderEliminar
  10. una ayuda urgente que codigo debo de agregar para k la secion la cierre automaticamente si no hago nada,, ejemplo si en un 1 min no hago nada a la pagina que me cierre mi secion gracias

    ResponderEliminar
  11. Muy buen ejemplo, funciona perfecto.

    ResponderEliminar
  12. Buen ejemplo y bien explicado. Gracias.

    ResponderEliminar