ASP.NET 2.0에서 로그인 컨트롤을 사용할 때 값 또는 데이터를 한 페이지에서 다른 페이지로 전달합니다.

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

  •  03-07-2019
  •  | 
  •  

문제

로그인 페이지의 ASP.NET 2.0에서 사용 가능한 로그인 컨트롤을 사용하고 있습니다. 사용자가 데이터베이스에 대해 성공적으로 인증되면 사용자를 home.aspx로 리디렉션합니다. 여기에서는 사용자의 이름을 Home.aspx로 전달하여 사용자가 Home.aspx에서 자신의 이름으로 인사 할 수 있도록하고 싶습니다. 예 : 환영 스미스

로그인 자격 증명을 확인하는 동안 데이터베이스의 사용자 테이블에서 사용자 이름을 추출하고 있습니다.

누군가가 안전한 방식 으로이 작업을 수행하는 방법을 알려 주시겠습니까 (보안이 아니라 조금).

감사,

도움이 되었습니까?

해결책

이런 종류의 데이터를위한 좋은 곳은 세션에있을 것입니다. 첫 페이지에서 이와 같은 것을 시도하십시오.

this.Session["UserName"] = userName;

그런 다음 해당 세션의 후속 페이지가 해당 사용자를 위해 액세스 할 수 있습니다. this.Session["UserName"].

그래도 가장 좋은 방법은 관리 할 정적 클래스를 만드는 것입니다. Session 당신은 그렇게 좋아합니다 :

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
}

그런 다음 응용 프로그램은 다음과 같은 세션 상태에 액세스 할 수 있습니다.

SessionManager.UserName

이렇게하면 앞으로 최대한의 유연성과 확장 성이 제공됩니다.

다른 팁

표준 ASP.NET 인증을 사용하는 경우 페이지 객체의 사용자 속성을 통해 사용자 이름에 액세스 할 수 있어야합니다.

user.identity.name

Andrew가 제안한 것처럼 세션은 사용자 이름을 배치 할 수있는 일반적인 장소이지만 가능한 경우 세션을 전혀 사용하지 않습니다.

사용자 이름으로 쿠키를 설정할 수 있습니다.

로그인 컨트롤의 DestinationPageUrl 속성을 쿼리 문자열에 포함하도록 설정할 수도 있습니다. 그것은 느껴지거나 꽤 절름발이처럼 보입니다.

처럼 Scotts 표준 로그인 컨트롤과 멤버십 제공 업체를 사용하는 경우이 정보는 user.identity.name에서 이미 사용할 수 있습니다.

제가 답을 게시하는 유일한 이유는 로그인 이름 컨트롤, 페이지/마스터 페이지에 떨어 뜨릴 수 있고이를 자동으로 수행 할 수 있습니다.

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

이것은 사용자가 로그인 할 때 "환영, Zhaph"를 렌더링하거나 그렇지 않은 경우 아무것도 없습니다.

당신은 또한 이것과 잘 결합 할 수 있습니다 loginView 그리고 loginstatus 통제 수단:

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

이 컨트롤 조합은 다음을 수행합니다.

  1. 사용자가 디스플레이로 로그인하지 않은 경우 : 등록 또는 로그인
  2. 사용자가 디스플레이로 로그인 한 경우 : 다시 오신 것을 환영합니다 Zhaph- 로그 아웃

로그인 링크는 web.config의 설정에 의해 채워져 있으며 LoginStatus 컨트롤에 의해 생성됩니다.

Andrew가 말했듯이, 세션은 민감한 데이터를 저장하는 주요 장소입니다.

그러나 사용자 이름이 민감한 이유는 무엇입니까? 쿠키에 저장하고 사용자가 들어올 때마다 집에서 인쇄 할 수 있습니다.

편집하다 : ASP.NET에서 쿠키를 사용할 수 있습니다.

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

노트 : 클라이언트의 기계에 저장된 쿠키. 따라서 민감한 데이터를 저장하는 데 사용해서는 안됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top