2017-04-12 6 views
1

asp.net 로그인 컨트롤에서 완전히 다른 site.master 페이지로 값을 전달하려고합니다. 이것은 내 login.aspx.cs 페이지입니다 -세션이 site.master 페이지에서 null을 반환합니다.

protected void LoginUser_OnAuthenticate(object sender, AuthenticateEventArgs e) 
    { 
     Session["username"] = LoginUser.UserName; 
     Security.AuthenticateUser(LoginUser.UserName, LoginUser.Password, LoginUser.RememberMeSet); 
    } 

코드의이 부분은 login.aspx 페이지에서 값을 수신 -

var username = Session["username"].ToString(); 

var settings = ConfigurationManager.ConnectionStrings["BlogEngine"].ConnectionString; 
SqlConnection conn = new SqlConnection(settings); 
-이 내 site.master 페이지

<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false" OnAuthenticate="LoginUser_OnAuthenticate"> 
    <div class="form-group"> 
     <label>Username</label> 
     <asp:TextBox ID="UserName" runat="server" AutoCompleteType="None" CssClass="textEntry ltr-dir"></asp:TextBox> 
    </div> 
    <div class="form-group"> 
     <label>Password</label> 
     <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry ltr-dir" TextMode="Password"></asp:TextBox> 
    </div> 
</asp:Login> 

입니다

디버그 할 때마다 Var 사용자 이름에 Null 값이 표시됩니다. login.aspx.cs 페이지에서 사용자 이름의 값을 세션에 전달합니다.

어떻게 해결하나요?

은 NB : Security.AuthenticateUer() 방법 -

public static bool AuthenticateUser(string username, string password, bool rememberMe) 
    { 
     string un = (username ?? string.Empty).Trim(); 
     //string pw = (password ?? string.Empty).Trim(); 

     if (!string.IsNullOrWhiteSpace(un)) 
     { 
      var user = Membership.GetUser(un); 
      string res = Convert.ToString(user); 
      bool isValidated = Membership.ValidateUser(res, DEFAULT_PASSWORD); 
      if (isValidated) 
      { 
       if (BlogConfig.SingleSignOn) 
       { 
        FormsAuthentication.SetAuthCookie(un, rememberMe); 
        return true; 
       } 

       HttpContext context = HttpContext.Current; 
       DateTime expirationDate = DateTime.Now.Add(FormsAuthentication.Timeout); 

       FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
        1, 
        un, 
        DateTime.Now, 
        expirationDate, 
        rememberMe, 
        $"{SecurityValidationKey}{AUTH_TKT_USERDATA_DELIMITER}{Blog.CurrentInstance.Id}", 
        FormsAuthentication.FormsCookiePath 
       ); 

       string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

       // setting a custom cookie name based on the current blog instance. 
       // if !rememberMe, set expires to DateTime.MinValue which makes the 
       // cookie a browser-session cookie expiring when the browser is closed. 
       System.Web.HttpCookie cookie = new System.Web.HttpCookie(FormsAuthCookieName, encryptedTicket); 
       cookie.Expires = rememberMe ? expirationDate : DateTime.MinValue; 
       cookie.HttpOnly = true; 
       context.Response.Cookies.Set(cookie); 

       string returnUrl = context.Request.QueryString["returnUrl"]; 
       Console.WriteLine("Redirect To This URL :" + returnUrl); 

       // ignore Return URLs not beginning with a forward slash, such as remote sites. 
       if (string.IsNullOrWhiteSpace(returnUrl) || !returnUrl.StartsWith("/")) 
        returnUrl = null; 

       if (!string.IsNullOrWhiteSpace(returnUrl)) 
       { 
        context.Response.Redirect(returnUrl); 
       } 
       else 
       { 
        if (IsReportUser(un)) 
        { 
         var reportPage = ""; 
         context.Response.Redirect(reportPage); 
        }; 

        context.Response.Redirect(Utils.RelativeWebRoot); 
       } 

       return true; 
      } 
     } 
     return false; 
    } 
+0

login.aspx는 동일한 마스터 페이지를 사용합니까? 그렇다면'Session [ "username"]'은'login.aspx'에서 로그인하는 동안 null이 될 것입니다. – Win

+0

@Win, login.aspx는 다른 마스터 페이지 인 account.master를 사용합니다. login.aspx.cs는 사용자를 인증하면 사용자를 site.master에 기록합니다. –

+0

Security.AuthenticateUser의 코드를 보여줄 수 있습니까? – Win

답변

1

것은 당신이 FormAuthentication을 사용하고 있기 때문에, 사용자 이름은 실제 원리 객체 내부에 저장됩니다. 이렇게 사용자 이름을 검색 할 수 있습니다. -

var username = User.Identity.Name; 
+0

가이 System.Web의 네임 스페이스인지 확인하십시오. 이름을 계속 유지하기 때문에 'Üser'는 현재 컨텍스트에 존재하지 않으며 System.Web을 가져 왔습니다. –

+1

그래, var username = HttpContext.Current.User.Identity.Name을 사용했습니다. 이것을 시험하고 너에게 돌아 가자. –

+0

감사합니다. 이 작품 –