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对象确保我的网站安全性,我是否仍然可以使用登录控件?
是的,你可以使用它,请阅读我关于这个问题的文章。。
本文探讨了ASP.NET登录控件的各种高级应用技巧,包括根据不同用户组进行重定向、隐藏登录控件、禁用“记住我”选项、自定义用户验证逻辑等。还解决了常见问题,如登录控件的显示样式调整、登录失败记录、以及如何处理预定义用户凭据。

3581

被折叠的 条评论
为什么被折叠?



