el código de la pagina de logueo es esta
Código:
el global asaxusing System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { if (txtuser.Text != "" & txtpass.Text != "") { string rol = IsAuthenticated(this.txtuser.Text, this.txtpass.Text); if (rol != "") { FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtuser.Text, DateTime.Now, DateTime.Now.AddMinutes(30), false, rol); //Encriptar el type string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //crear la coockie con el ticket cifrado HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); //añadimos la cookie a la coleccion de cookies del navegador Response.Cookies.Add(authCookie); //Response.Redirect(FormsAuthentication.GetRedirectUrl(txtuser.Text, false)); } else { Response.Write("<script>alert('El usuario especificado no existe')</script>"); } } else { Response.Write("<script>alert('Tanto el nombre de usuario como al contraseña son obligatorios para loguearse')</script>"); } } private string IsAuthenticated(string username, string password) { // Comprobamos que el usuario existe en nuestra base de datos y que la contraseña es la correcta SqlConnection objconectar = new SqlConnection(ConfigurationManager.ConnectionStrings["conexioncartelera"].ToString()); //Abrimos la conexion objconectar.Open(); //Creamos la variable tipo Command y le asignamos la consulta sql para que nos busque solo por el apellido asignado SqlCommand Consulta = new SqlCommand("SELECT rol from cliente Where idcliente=@pidcliente and pass=@ppass;", objconectar); Consulta.Parameters.Add("@pidcliente", SqlDbType.VarChar); Consulta.Parameters["@pidcliente"].Value = this.txtuser.Text; Consulta.Parameters.Add("@ppass", SqlDbType.VarChar); Consulta.Parameters["@ppass"].Value = this.txtpass.Text; //Ejecutamos la cosulta y la asignamos al lector. string rol = Convert.ToString(Consulta.ExecuteScalar()); //Cerramos conexión y desechamos la variable objconectar.Close(); objconectar.Dispose(); return rol; } }
Código:
el web.config de la zona libre <%@ Application Language="C#" %> <script runat="server"> void Application_AuthentificateRequest(Object sender, EventArgs e) { //Extraer la autentificacion de la cookie string cookiename = FormsAuthentication.FormsCookieName; HttpCookie authcookie = Context.Request.Cookies[cookiename]; //Compruebo que la cookie es valida if (null == authcookie) { return; } FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authcookie.Value); } catch { //fallo al desencriptar return; if (null == authTicket) { return; } } //Una vez esta el ticket creada le asignamos los roles de usuario string[] roles = authTicket.UserData.Split(new char[] { '|' }); //Crear el objeto identidad FormsIdentity id = new FormsIdentity(authTicket); System.Security.Principal.GenericPrincipal Principal = new System.Security.Principal.GenericPrincipal(id, roles); //añadir el objeto principal al actual httpcontext Context.User = Principal; } void Application_Start(object sender, EventArgs e) { // Código que se ejecuta al iniciarse la aplicación } void Application_End(object sender, EventArgs e) { // Código que se ejecuta cuando se cierra la aplicación } void Application_Error(object sender, EventArgs e) { // Código que se ejecuta al producirse un error no controlado } void Session_Start(object sender, EventArgs e) { // Código que se ejecuta cuando se inicia una nueva sesión } void Session_End(object sender, EventArgs e) { // Código que se ejecuta cuando finaliza una sesión. // Nota: El evento Session_End se desencadena sólo con el modo sessionstate // se establece como InProc en el archivo Web.config. Si el modo de sesión se establece como StateServer // o SQLServer, el evento no se genera. } </script>
Código:
y el web.config de una de las secciones (En este caso la de administrador)<?xml version="1.0"?> <!-- Nota: como alternativa para editar manualmente este archivo puede utilizar la herramienta Administración de sitios Web para configurar los valores de la aplicación. Utilice la opción Sitio Web->Configuración de Asp.Net en Visual Studio. Encontrará una lista completa de valores de configuración y comentarios en machine.config.comments, que se encuentra generalmente en \Windows\Microsoft.Net\Framework\v2.x\Config --> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <appSettings/> <connectionStrings> <!-- Aqui definimos la conexion con la bases de datos --> <add name="conexioncartelera" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=diaznoriega;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <httpRuntime useFullyQualifiedRedirectUrl="true" /> <!-- Establezca debug="true" en la compilación para insertar símbolos de depuración en la página compilada. Dado que este proceso afecta al rendimiento, debe establecer este valor como true durante la depuración. --> <roleManager enabled="true" /> <httpHandlers> <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> </httpHandlers> <compilation debug="true"> <buildProviders> <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </buildProviders> </compilation> <!-- La sección <authentication> permite configurar el modo de autenticación de seguridad utilizado por ASP.NET para identificar a un usuario entrante. --> <authentication mode="Forms"> <forms loginUrl="Logueo.aspx" name="AuthCookie" timeout="30" path="/"> </forms> </authentication> <!-- Permito a todos los usuarios --> <authorization> <allow users="*"/> </authorization> <!-- La sección <customErrors> permite configurar las acciones que se deben llevar a cabo/cuando un error no controlado tiene lugar durante la ejecución de una solicitud. Específicamente, permite a los desarrolladores configurar páginas de error html que se mostrarán en lugar de un seguimiento de pila de errores. <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> --> </system.web> </configuration>
Código:
<?xml version="1.0" encoding="utf-8"?> <!-- Nota: como alternativa para editar manualmente este archivo puede utilizar la herramienta Administración de sitios Web para configurar los valores de la aplicación. Utilice la opción Sitio Web->Configuración de Asp.Net en Visual Studio. Encontrará una lista completa de valores de configuración y comentarios en machine.config.comments, que se encuentra generalmente en \Windows\Microsoft.NET\Framework\v2.0.xxxxx\Config --> <configuration> <appSettings/> <connectionStrings/> <system.web> <authorization> <allow roles="administrador" /> <deny users="*" /> </authorization> </system.web> </configuration>