同时开启成员管理和角色管理,先注册一个用户后,在用角色管理的功能把该用户添加到某个角色中,这时数据库中会出现重复的用户名,这是为什么,怎么解决?请教各位了

解决方案 »

  1.   

    1.成员服务  使用ASP.NET Web Site Administration Tool创建配置网站的权限信息。该工具在http://localhost/<项目名>/webadmin.axd,通过配置,该工具将直接生成一个web.config的文件用于存贮成员信息。
    在asp.net2.0中也提供了两个类用于成员管理,这两个类是Membership和MembershipUser,他们位于System.Web.Security命名空间下。其中前者包含一系列静态方法,用于创建,删除,更改,验证等操作。后者是一个描述单一用户的登陆信息的类,每一个实例就是一个用户登陆信息的集合。Membership的一些方法:(基本可以见名知意)       CreateUser 
           DeleteUser 
           GeneratePassword 
           GetAllUser 
           GetUser 
           UpdateUser 
           ValidateUser 
    MembershipUser的一些方法:       ChangePassword 
           ChangePasswordQuestionAndAnswer 
           GetPassword 
           ResetPassword
    MembershipUser的一些属性:(基本可以见名知意)       Comment(用于存储用户自定义数据) 
           CreationDate 
           Email 
           LastLoginDate 
           LastPasswordChangedDate 
           UserId 
           UserName
     一些例子:创建一个新用户 MembershipCreateStatus status;
            MembershipUser user = Membership.CreateUser(this.TB_Username.Text,
                this.TB_Password.Text, this.TB_Email.Text, out status);//传出参数status中包含了创建用户的结果信息,可以根据这些信息进行进一步处理.更改密码 if (this.IsValid)
        {
            MembershipUser user = Membership.GetUser();        user.Email = this.TB_Email.Text;
            user.Comment = this.TB_Comment.Text;
            Membership.UpdateUser(user);        if ((this.TB_OldPassword.Text.Length > 0) &&
                     (this.TB_NewPassword.Text.Length > 0))
            {
                user.ChangePassword(this.TB_OldPassword.Text,
                    this.TB_NewPassword.Text);
            }
        }另所有的用户信息可以存储在SQL Server中或者Access中。要在SQL Server中存储这些信息可以使用<windir>\Microsoft.NET\Framework\<version>下的aspnet_regsql.exe工具来生成数据库。  数据库生成完毕后需要在配置文件中做如下更改:<?xml version="1.0"?>
    <configuration>    <connectionStrings>
              <add name="LocalSqlServer"
                  connectionString="data source=127.0.0.1;Integrated Security=SSPI" />
        </connectionStrings>    <system.web>
            <membership defaultProvider="AspNetSqlProvider" />
            <roleManager enabled="true" defaultProvider="AspNetSqlProvider" />
        </system.web>
    </configuration>
     2.角色管理服务  与成员管理类似,角色管理也能通过ASP.NET Web Site Administration Tool进行。与成员管理不同的是角色管理只有一个类Roles。也就是说role只是作为一个字符串存在,并没有一个role类来记录它的成员信息。它提供一系列静态方法用于角色操作。(同样,基本是见名知意)AddUserToRole 
    CreateRole 
    DeleteRole 
    GetRolesForUser 
    GetUsersInRole 
    IsUserInRole 
    RemoveUserFromRole
      由于角色管理缺省是禁用的,所以要在配置文件中做如下更改: <configuration>
      <system.web>
        <roleManager enabled="true" />
      </system.web>
    </configuration>
    另可以在cookie中缓存角色信息,要实现这一点只需要在配置文件中做如下更改:
    <configuration>
      <system.web>
        <roleManager enabled="true" cacheRolesInCookie="true" />
        <!-- 其他属性以及默认值:
          cookieName=".ASPXROLES"         // Cookie 名
          cookieTimeout="30"              // Cookie 生存期
          cookiePath="/"                  // Cookie 路径
          cookieRequireSSL="false"        // 限制 cookie 使用 SSL
          cookieSlidingExpiration="true"  // 重新申请满期的Cookie
          cookieProtection="All" />       // Cookie 保护级别
        -->
      </system.web>
    </configuration>
      

  2.   

    问一下,下面的
        <system.web>
            <membership defaultProvider="AspNetSqlProvider" />
            <roleManager enabled="true" defaultProvider="AspNetSqlProvider" />
        </system.web>这两个aspnetsqlprovider(成员管理的角色管理的)是不是必须一样,否则就会导致重复用户?
      

  3.   

    当把已注册用户添加到角色中时(Roles.AddUserToRole(TextBox3.Text.ToString(), TextBox4.Text.ToString());),在Sql2000的数据库中的aspnet_membership表和aspnet_users表中存在重名用户
      

  4.   

    这两个同名用户的ApplicationId一样吗?是否程序把你的代码区别为两个Application了?
      

  5.   

    已解决,是我把用户管理和角色管理的applicationName写得不一致了