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;
}
login.aspx는 동일한 마스터 페이지를 사용합니까? 그렇다면'Session [ "username"]'은'login.aspx'에서 로그인하는 동안 null이 될 것입니다. – Win
@Win, login.aspx는 다른 마스터 페이지 인 account.master를 사용합니다. login.aspx.cs는 사용자를 인증하면 사용자를 site.master에 기록합니다. –
Security.AuthenticateUser의 코드를 보여줄 수 있습니까? – Win