transmettre des valeurs ou des données d'une page à une autre lorsque vous utilisez le contrôle de connexion dans ASP.NET 2.0

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

  •  03-07-2019
  •  | 
  •  

Question

J'utilise Login Control disponible dans ASP.NET 2.0 dans la page de connexion. Une fois que l'utilisateur est authentifié avec succès sur la base de données, je le redirige vers home.aspx. Ici, je souhaite également transmettre le nom de l'utilisateur à home.aspx afin que celui-ci reçoive son nom dans home.aspx. Ex: Welcome Smith

J'extrais le nom de l'utilisateur de la table users de ma base de données pendant que je vérifie les informations de connexion.

Quelqu'un pourrait-il me dire comment faire cela de manière sécurisée (peut-être pas pour sécuriser, mais un peu)?

Merci,

Était-ce utile?

La solution

Un bon endroit pour ce type de données serait en session. Essayez quelque chose comme ça sur la première page:

this.Session["UserName"] = userName;

et les pages suivantes de cette session pour cet utilisateur pourraient accéder à this.Session [" Nom d'utilisateur "] .

Cependant, la meilleure chose à faire est de créer une classe statique pour gérer Session pour vous, de la manière suivante:

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
}

Ensuite, votre application peut accéder à l'état de la session comme suit:

SessionManager.UserName

Cela vous donnera une flexibilité et une évolutivité maximales pour aller de l'avant.

Autres conseils

Si vous utilisez l'authentification asp.net standard, vous devriez pouvoir accéder au nom de l'utilisateur via la propriété User de l'objet de page.

User.Identity.Name

Comme Andrew l’a suggéré, Session est un endroit commun pour placer un nom d’utilisateur, même si j’évite au maximum d’utiliser Session si possible.

Vous pouvez définir un cookie avec le nom de l'utilisateur.

Vous pouvez également définir la propriété DestinationPageUrl du contrôle de connexion pour inclure le nom d'utilisateur dans la chaîne de requête. Bien que cela semble / ait l'air assez nul.

As ScottS , si vous utilisez les contrôles de connexion standard et un fournisseur d'adhésion, ces informations sont déjà disponibles dans User.Identity.Name.

La seule raison pour laquelle je poste une réponse est de mentionner le LoginName , que vous pouvez déposer sur une page ou une page maître et le faire automatiquement pour vous:

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

Cela rendra "Bienvenue, Zhaph". lorsque l'utilisateur est connecté ou rien s'il ne l'est pas.

Vous pouvez également combiner cela très bien avec LoginView et LoginStatus contrôles:

<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" />

Cette combinaison de contrôles aura les effets suivants:

  1. Si l'utilisateur n'est pas connecté, affichez-vous ou enregistrez-vous
  2. Si l'utilisateur est connecté, affichez: Bienvenue à nouveau Zhaph - Déconnexion

Les liens de connexion sont renseignés par les paramètres de web.config et générés par le contrôle LoginStatus.

Oui, comme l'a dit Andrew, la session est le lieu principal de stockage des données sensibles.

mais pourquoi le nom d'un utilisateur est-il sensible? Vous pouvez l'enregistrer dans un cookie et l'imprimer dans votre home.aspx à chaque fois qu'un utilisateur entre.

MODIFIER: Vous pouvez utiliser les cookies dans ASP.NET comme suit:

// 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);
}

REMARQUE: Les cookies stockés sur la machine du client. vous ne devez donc pas les utiliser pour stocker des données sensibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top