2009-03-06 1 views
0

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

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

안전한 방법으로이를 수행하는 방법을 알려주시겠습니까?

감사합니다.

답변

3

그런 종류의 데이터를 저장하는 좋은 장소는 세션에 있습니다. 첫 페이지에 이런 식으로 뭔가를 시도 : 해당 사용자에 대한 세션에서

this.Session["UserName"] = userName; 

다음 다음 페이지가 this.Session["UserName"]에 액세스 할 수 있습니다.

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 

이 뜻을 그렇게 좋아에 대한

하지만 가장 좋은 것은 Session을 관리 할 수있는 정적 클래스를 만드는 것입니다 최대한의 유연성과 확장 성을 제공합니다.

+0

감사합니다. Andrew. 시간과 자세한 설명에 감사드립니다. 나는 그것을 시도 할 것이다. 1 질문. 내 상황에서는 사용자가 전자 메일 및 암호를 입력하고 데이터베이스에 대한 값을 확인할 때 테이블에서 사용자 이름을 가져 와서 나머지 응용 프로그램에서이 값을 사용하려고합니다. 그것을하는 방법? –

0

예, Andrew가 말했듯이 세션은 중요한 데이터를 저장하는 기본 공간입니다.

하지만 사용자 이름이 중요한 이유는 무엇입니까? 당신은 쿠키에 저장하고 사용자가 온다 때마다 home.aspx에 인쇄 할 수 있습니다

편집 :. 당신은 그런 식으로 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); 
} 

참고 : 쿠키 클라이언트 컴퓨터에 저장됩니다. 민감한 데이터를 저장하는 데 사용해서는 안됩니다.

+0

당신이 옳습니다. 하지만 솔직히 나는 진짜 초보자이며 쿠키 사용법을 알고 싶습니다. 또한 어떤 것이 성능면에서 가장 좋은 방법인지 알고 싶습니다. 정말 고마워. –

1

표준 asp.net 인증을 사용하는 경우 페이지 개체의 User 속성을 통해 사용자 이름에 액세스 할 수 있어야합니다. 나는 모든 가능한 경우 세션을 사용하지 불구하고

User.Identity.Name는

앤드류가 제안한 것처럼, 세션, 사용자 이름을 배치하는 일반적인 장소입니다.

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

쿼리 문자열에 사용자 이름을 포함하도록 로그인 컨트롤의 DestinationPageUrl 속성을 설정할 수도 있습니다. 그 느낌이 꽤/절름발이지만.

+0

감사합니다 ScottS.But 쿠키를 사용하는 방법을 모르겠다. 로그인 컨트롤의 사용자 이름 텍스트 상자는 사용자 이름이 아니라 전자 메일 주소를 사용합니다. 그리고 로그인 컨트롤의 자격 증명을 기반으로 데이터베이스에서 사용자 이름을 가져와야합니다. –

+0

Request.Cookies.Add (새 HttpCookie ("cookieName", "value"))를 사용하여 쿠키를 설정할 수 있습니다. 이상을 사용하여 쿠키를 읽습니다. 문자열 값 = Request.Cookies [ "cookieName"]. 값; – ScottS

1

ScottS으로 말하면 표준 로그인 컨트롤과 멤버 자격 공급자를 사용하는 경우이 정보는 이미 User.Identity.Name에서 사용할 수 있습니다.

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

이 "밖으로 렌더링 :

내가 대답을 게시하도록하겠습니다 유일한 이유는 당신이 페이지/마스터 페이지에 드롭 할 수 있으며이 당신을 위해 자동으로 수행 한 LoginName 제어를 언급하는 것입니다 환영합니다, Zhaph "사용자가 로그인 한 경우 또는 로그인하지 않은 경우 아무것도 표시하지 않습니다.

당신은 또한 LoginViewLoginStatus 컨트롤을 아주 잘이 결합 할 수 있습니다 :

<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 - Logout

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

+0

감사합니다 Zhaph.The 로그인 컨트롤의 사용자 이름 텍스트 박스는 사용자 이름이 아닌 전자 메일 주소를 사용합니다. 그리고 로그인 컨트롤의 자격 증명을 기반으로 데이터베이스에서 사용자 이름을 가져와야합니다. 그런 경우 어떻게해야할까요? –

+0

아, 거기에 문제가 생겼습니다. 물론 내장 된 컨트롤을 사용하는 데는 한계가 있습니다. 원하는대로 유연하지는 않습니다. 어떤 경우에는 세션에서 팝업하거나 프로필의 속성으로 추가 할 수 있습니다. http://bit.ly/AzSQy –

관련 문제