viernes, 10 de mayo de 2013

Manejo de sesiones en ASP.NET

Podemos crear un fichero de formulario con dos controles Edit y un botón

fichero: login.aspx

tendrá un aspecto mas o menos así:



<%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title>Logado</title>

<link href="StyleSheet1.css" type="text/css" rel="stylesheet" />

</head>

<body>

<form id="form1" runat="server">

<div>

 
<asp:Panel ID="Panel1" runat="server" Height="156px" BackColor="#5599FF">

<div style="text-align:right"><h2>Alba Informática S.C.I.</h2></div>

</asp:Panel>

 
</div>

<div>

<asp:Panel ID="Panel2" runat="server" CssClass="panel">

<div>&nbsp;</div>

<div class="textos">Codigo</div>

<div>

<asp:TextBox ID="TextBox2" runat="server" Width="282px" CssClass="controles"></asp:TextBox>

</div>

<div>&nbsp;</div>

<div class="textos">Password</div>

<div>

<asp:TextBox ID="TextBox3" runat="server" Width="282px" CssClass="controles"></asp:TextBox>

</div>

<div>&nbsp;</div>

<div>

<asp:Label ID="lblSms" runat="server" CssClass="textos" Text="Bandeja de notificaciones"></asp:Label>

</div>

 
<div>&nbsp;</div>

<div>

<asp:Button ID="Button1" runat="server" CssClass="botones" OnClick="Button1_Click" Text="Login" Width="91px" />

</div>

<div>&nbsp;</div>

 
</asp:Panel>

</div>

</form>

</body>

</HTML>

Pues bien desde el evento Button1_Click que hemos definido previamente
podemos poner un código que valide los datos y nos redireccione a otra web o bien nos muestre un mensaje con lo que ha sucedido.

protected void Button1_Click(object sender, EventArgs e)

{
string codigo = TextBox2.Text; //leemos el contenido de cada control edit

string password = TextBox3.Text;

if (codigo == "sa") //si en el primer control hemos escrito "sa"
{Session["logado"] = true;  //crea una variable de sesion (visible en todas las webs)

Response.Redirect("articulos.aspx") //redireccionamos a otra web
}else
{ lblSms.Text = "Datos incorrectos. Intentenlo de nuevo por favor.";
}
}



En el fichero articulos.aspx


Validamos que tengamos acceso a la web (que se exista una variable de sesión con el valor correcto) en otro caso obligamos a que se logue redireccionándolo a la web de logado.

Esta validación se tendrá que incluir en todas paginas que queramos que no se acceda sin logarse previamente

protected void Page_Load(object sender, EventArgs e)

{
//IMPORTANTE. Cuando se lee una variable de sesión
//hay que realizar una conversión de tipos (casting) al tipo del valor que almacena
//en este caso es un boolean por esto se hace (bool) delante de la variable de sesion
 
if ((Session["logado"] == null) || ((bool)Session["logado"] == false))

{
 
Response.Redirect("login.aspx");


}






 



7 comentarios:

  1. Jesús, exactamente lo que buscaba. Muchas gracias :D

    ResponderEliminar
  2. Excelente, sencillo y bien explicado.

    ResponderEliminar
    Respuestas
    1. Gracias juan. Si en cualquier articulo teneis duda, podis plantearla por los comentarios.
      Un saludo

      Eliminar
  3. Que tal Jesus,

    Gracias por postear esta solución, estoy retomando de nuevo esto de la programación y tu post me ayudo y me ahorro un buen de tiempo.

    Saludos

    ResponderEliminar
    Respuestas
    1. De nada aquí estamos para echarnos un cable entre todos y poder avanzar en nuestros proyectos. Gracias a ti por tu comentario.

      Eliminar

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...