ASP.NET 登录控件(Login control)相关问题
文章转载于:破小三的雅阁
http://www.seamana.cn/index.php/archives/459.html
1 -如何根据他们的用户组重定向用户到不同的网页。
protected void Login1_LoggedIn(object sender, EventArgs e) { // 如果在查询字符串中没有 returnUrl , 我们根据用户的角色来重定向 if (string.IsNullOrEmpty(Request.QueryString["ReturnUrl"])) { if (Roles.IsUserInRole(Login1.UserName, "Admins")) Response.Redirect("~/Admins/Default.aspx"); else if (Roles.IsUserInRole(Login1.UserName, "Editors")) Response.Redirect("~/Editors/Default.aspx"); } }
2 -当登录成功后,如何隐藏登录控件
要对登录用户隐藏登录控件,只需将VisibleWhenLoggedIn属性设为false.
<asp:Login ID="Login1" runat="server" VisibleWhenLoggedIn="False" ...
你也可以用LoginView 控件去实现它:
<asp:LoginView ID="LoginView1" runat="server"> <AnonymousTemplate> <asp:Login ID="Login1" runat="server"> </asp:Login> </AnonymousTemplate> </asp:LoginView>
3 ,如何隐藏“下次记住我“复选框?
您可能需要防止用户选中”记住我的下一次”复选框,以防止持续的验证Cookie。
为了做到这一点,你只需要设置它的DisplayRememberMe属性为”FALSE” ,然后你需要设置它的RememberMeSet属性。
如果你一定要网站记住用户,您可以将RememberMeSet属性设置为True ,否则你将其设置为false 。
<asp:Login ID="Login1" runat="server" DisplayRememberMe="false" RememberMeSet="false" ...
4 ,如何使用带有现有用户表登录控件?
默认情况下,登录控制将利用提供的成员关系以验证用户的身份,但如果您已经有您的自定义用户表,您可以使用登录控制这样的:
protected void Login1_Authenticate(object sender, System.Web.UI.WebControls.AuthenticateEventArgs e) { string userName = Login1.UserName; string password = Login1.Password; bool result = UserLogin(userName, password); if ((result)) { e.Authenticated = true; } else { e.Authenticated = false; } } private bool UserLogin(string userName, string password) { // 从web.config 读取连接字符串 string conString = ConfigurationManager.ConnectionStrings["ConnectionStringName"].ConnectionString; using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(conString)) { //'声明命令,该命令将被用来执行SELECT语句 SqlCommand com = new SqlCommand("SELECT UserName FROM Users WHERE UserName = @UserName AND Password = @Password", con); // 设置 username and password 参数 com.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = userName; com.Parameters.Add("@Password", SqlDbType.NVarChar).Value = password; //执行 select命令 try { con.Open(); string result =Convert.ToString( com.ExecuteScalar()); //检测结果 if (string.IsNullOrEmpty(result)) { //i无效的user/password , 返回false return false; } else { // 返回true,有效登录 return true; } } catch (Exception ex) { throw; } } }
5 ,我不想将登录控件作为HTML表,而想作为一个当Div,该怎么做?
您可以使用的CSS友好控制适配器去解决这个问题。
6.之在我发布我的网站后,我收到System.Web.Security.SqlMembershipProvider’ requires a database schema compatible with schema version ‘1′ . ..的错误,该怎么办?
一个可能的原因是, ” aspnet_SchemaVersions “表的版本不具有正确值,请确保它有如下的值:
Feature | CompatibleSchemaVersion | IsCurrentVersion |
common | 1 | TRUE |
health monitoring | 1 | TRUE |
membership | 1 | TRUE |
personalization | 1 | TRUE |
profile | 1 | TRUE |
role manager | 1 | TRUE |
8 ,如何以弹出显示登录菜单?
详见我的另一篇文章
9 -我该如何记录无效的登录尝试?
protected void Login1_LoginError(object sender, EventArgs e) { string UserName = Login1.UserName; string Password = Login1.Password; }
10 ,我在web.config 的credential中指定我网站中的用户,我仍然可以使用登录控件登录吗?
是你可以,你只需要处理登录控件的authenticate验证事件。 假设你在Web.config中有Credential节点:
<authentication mode="Forms"> <forms> <credentials passwordFormat="Clear"> <user name="User1" password="****" /> <user name="User2" password="****" /> </credentials> </forms> </authentication>
你可以让用户控件这样使用上述节点
protected void Login1_Authenticate(object sender, System.Web.UI.WebControls.AuthenticateEventArgs e) { string UserName = Login1.UserName; string Password = Login1.Password; if (FormsAuthentication.Authenticate(UserName, Password)) { e.Authenticated = true; } else { e.Authenticated = false; } } :
FormsAuthentication.Authenticate方法将自动检查用户的credentials节点。
11 -我使用的不是FormsAuthenticaiton ,而是使用的Session对象确保我的网站安全性,我是否仍然可以使用登录控件?
是的,你可以使用它,请阅读我关于这个问题的文章。。