passar valores ou dados de uma página para outra quando você usa controle Login em ASP.NET 2.0

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou usando o controle de acesso disponível no ASP.NET 2.0 na página de login. Uma vez que o usuário é autenticado com êxito contra a base de dados, estou redirecionar o usuário para home.aspx. Aqui, eu quero passar sobre o nome do usuário também ao home.aspx para que o usuário será saudado com sua / seu nome no home.aspx. Ex: Welcome Smith

Estou extraindo o nome do usuário da tabela de usuários no meu banco de dados durante o tempo que eu verificar as credenciais de login.

Alguém poderia me dizer como fazer isso de forma segura (pode não ser para proteger, mas um pouco)?

Obrigado,

Foi útil?

Solução

Um lugar bom para esse tipo de dados seria em sessão. Tente algo assim na primeira página:

this.Session["UserName"] = userName;

e páginas em seguida subsequentes nesse sessão para que o usuário pode acessar this.Session["UserName"].

A melhor coisa a fazer, porém, é para criar uma classe estática para gerenciar Session para você assim:

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
}

Em seguida, o aplicativo pode o estado da sessão de acesso como este:

SessionManager.UserName

Isto lhe dará o máximo de flexibilidade e escalabilidade em frente.

Outras dicas

Se você estiver usando autenticação asp.net padrão, então você deve ser capaz de acessar o nome usuários através da propriedade do usuário do objeto página.

User.Identity.Name

Como Andrew sugeriu, Session é um lugar comum para colocar um nome de usuário, embora eu evitar o uso de sessão em todos, se possível.

Você pode definir um cookie com o nome de usuários.

Você também pode definir a propriedade DestinationPageUrl do controle de login para incluir o nome de usuário na cadeia de consulta. Apesar de que se sente / parece muito coxo.

Como Scotts disse, se você estiver usando os controles de login padrão e um provedor de associação esta informação já está disponível para você em User.Identity.Name.

A única razão pela qual eu estou postando uma resposta é de mencionar a LoginName controle, que você pode cair em uma página página / master e ter este feito automaticamente para você:

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

Isso vai tornar a "Bem-vindo, Zhaph" quando o usuário está logado, ou nada se eles não são.

Você também pode combinar isso muito bem com o LoginView e 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 combinação de controles fará o seguinte:

  1. Se o usuário não estiver logado no display: Registrar ou Entrar
  2. Se o usuário estiver conectado no display: Welcome Back Zhaph - Sair

Os links de login é povoada por as configurações no web.config, e gerou pelo controle LoginStatus.

sim como Andrew disse, a sessão é o principal lugar para armazenar dados sensíveis.

mas por um nome de usuário é sensível? Você pode salvá-lo no cookie e imprimi-lo em sua home.aspx sempre que o usuário entra.

EDIT: Você pode usar cookies no ASP.NET assim:

// 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 armazenados na máquina do cliente. então você não deve usá-los para armazenar dados sensíveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top