pase valores o datos de una página a otra cuando use el control de inicio de sesión en ASP.NET 2.0

StackOverflow https://stackoverflow.com/questions/620134

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy usando Control de inicio de sesión disponible en ASP.NET 2.0 en la página de inicio de sesión. Una vez que el usuario se autentica con éxito en la base de datos, estoy redirigiendo al usuario a home.aspx. Aquí, quiero pasar el nombre del usuario también a home.aspx para que el usuario sea recibido con su nombre en home.aspx. Ej: Bienvenido Smith

Estoy extrayendo el nombre del usuario de la tabla de usuarios en mi base de datos durante el tiempo que compruebo las credenciales de inicio de sesión.

¿Alguien podría decirme cómo hacer esto de manera segura (puede no ser seguro, pero un poco)?

Gracias,

¿Fue útil?

Solución

Un buen lugar para ese tipo de datos sería en sesión. Intenta algo como esto en la primera página:

this.Session["UserName"] = userName;

y luego las páginas subsiguientes en esa sesión para ese usuario podrían acceder a this.Session [" UserName "] .

Lo mejor que se puede hacer es crear una clase estática para administrar Session para que te guste:

using System;
using System.Web;

static class SessionManager
{
    public static String UserName
    {
        get
        {
            return HttpContext.Current.Session["UserName"].ToString();
        }
        set
        {
            HttpContext.Current.Session["UserName"] = value;
        }
    }

        // add other properties as needed
}

Entonces tu aplicación puede acceder al estado de la sesión de esta manera:

SessionManager.UserName

Esto le dará la máxima flexibilidad y escalabilidad para avanzar.

Otros consejos

Si está utilizando la autenticación asp.net estándar, debería poder acceder al nombre de los usuarios a través de la propiedad Usuario del objeto de la página.

User.Identity.Name

Como sugirió Andrew, la sesión es un lugar común para colocar un nombre de usuario, aunque evito usar la sesión si es posible.

Podría establecer una cookie con el nombre de los usuarios.

También puede establecer la propiedad DestinationPageUrl del control de inicio de sesión para incluir el nombre de usuario en la cadena de consulta. Aunque eso se siente / se ve bastante cojo.

Como ScottS dijo, si está usando los controles de inicio de sesión estándar y un proveedor de membresía, esta información ya está disponible para usted en User.Identity.Name.

La única razón por la que publico una respuesta es mencionar el LoginName control, que puede colocar en una página / página maestra y puede hacer esto automáticamente para usted:

<asp:LoginName id="LoginName1" runat="server" FormatString ="Welcome, {0}" />

Esto mostrará: " Bienvenido, Zhaph " cuando el usuario ha iniciado sesión, o nada si no lo están.

También puede combinar esto muy bien con LoginView y LoginStatus controles:

<asp:LoginView ID="RegisterLink" runat="server">
  <AnonymousTemplate>
    <div class="titleRegistration">
      <a href="/Users/Register.aspx">Register</a> or 
    </div>
  </AnonymousTemplate>
  <LoggedInTemplate>
    <div class="titleRegistration">
      Welcome back
        <asp:LoginName ID="LoginName1" runat="server" /> -
    </div>
  </LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="lsGeneral" runat="server"
  LogoutPageUrl="/Users/Logout.aspx" />

Esta combinación de controles hará lo siguiente:

  1. Si el usuario no ha iniciado sesión en la pantalla: Regístrese o inicie sesión
  2. Si el usuario ha iniciado sesión en la pantalla: Bienvenido de nuevo Zhaph - Cerrar sesión

Los enlaces de inicio de sesión se completan con la configuración en web.config y se generan mediante el control LoginStatus.

sí, como dijo Andrew, la sesión es el lugar principal para almacenar datos confidenciales.

pero ¿por qué el nombre de un usuario es sensible? Puede guardarlo en una cookie e imprimirlo en su home.aspx cada vez que ingrese un usuario.

EDITAR: Puedes usar cookies en ASP.NET de esa manera:

// Setting cookie : 
Response.Cookies["UserName"].Value = "Erhan";
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(7); // Persists 1 week

// Getting cookie : 
string username = string.Empty;
if(Request.Cookies["UserName"] != null)
{
    username = Server.HtmlEncode(Request.Cookies["UserName"].Value);
}

NOTA: Cookies almacenadas en la máquina del cliente. por lo que no debe usarlos para almacenar datos confidenciales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top