2 <asp:LinkButton ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click"></asp:LinkButton> |
3 <asp:HyperLink ID="lnkRegister" runat="server" NavigateUrl="~/register.aspx" Text="注册"></asp:HyperLink>
4 </asp:Panel>
5 <asp:Panel ID="pnlLoggedin" runat="server">
6 欢迎您,<asp:Label ID="lblUserName" runat="server"></asp:Label>!
7 [<asp:LinkButton ID="btnLogout" runat="server" Text="注销"
8 onclick="btnLogout_Click"></asp:LinkButton>]
9 </asp:Panel>
10 <asp:Panel ID="pnlNavigate" runat="server">
11 <asp:HyperLink ID="lnkDefault" runat="server" NavigateUrl="~/default.aspx" Text="首页"></asp:HyperLink> |
12 <asp:HyperLink ID="lnkTest" runat="server" NavigateUrl="~/test.aspx" Text="测试页"></asp:HyperLink>
13 </asp:Panel>
14
2 {
3 // 判断用户是否已登录。
4 if(HttpContext.Current.User.Identity.Name == "")
5 {
6 // 用户未登录。
7 pnlAnonymous.Visible = true;
8 pnlLoggedin.Visible = false;
9 }
10 else
11 {
12 // 用户已登录。
13 pnlAnonymous.Visible = false;
14 pnlLoggedin.Visible = true;
15
16 lblUserName.Text = HttpContext.Current.User.Identity.Name;
17 }
18 }
2 {
3 UserObject user = new UserObject();
4 user.Name = userName;
5 user.PasswordSalt = GenerateSalt();
6 user.PasswordHash = EncodePassword(password, user.PasswordSalt);
7
8 DataAccess.AddUser(user);
9 }
10
2
3 static string EncodePassword(string password, string salt)
4 {
5 byte[] src = Encoding.Unicode.GetBytes(password);
6 byte[] saltbuf = Convert.FromBase64String(salt);
7 byte[] dst = new byte[saltbuf.Length + src.Length];
8 byte[] inArray = null;
9 Buffer.BlockCopy(saltbuf, 0, dst, 0, saltbuf.Length);
10 Buffer.BlockCopy(src, 0, dst, saltbuf.Length, src.Length);
11
12 HashAlgorithm algorithm = HashAlgorithm.Create(PasswordHashAlgorithmName);
13 inArray = algorithm.ComputeHash(dst);
14
15 return Convert.ToBase64String(inArray);
16 }
17
18 static string GenerateSalt()
19 {
20 byte[] data = new byte[0x10];
21 new RNGCryptoServiceProvider().GetBytes(data);
22 return Convert.ToBase64String(data);
23 }
2 <tr><td>用户名:</td><td><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox></td></tr>
3 <tr><td>密码:</td><td><asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox></td></tr>
4 <tr><td colspan="2"><asp:Button ID="btnOK" runat="server" Text="确定"
5 onclick="btnOK_Click" /></td></tr>
6 </table>
7 <asp:Label ID="lblMessage" runat="server"></asp:Label>
2 {
3 try
4 {
5 Membership.CreateUser(txtUserName.Text, txtPassword.Text);
6
7 lblMessage.Text = "用户创建成功!";
8 }
9 catch(Exception ex)
10 {
11 lblMessage.Text = "错误:" + ex.Message;
12 }
13 }
14
2 {
3 // 获取用户。
4 UserObject user = DataAccess.GetUserByName(userName);
5 if(user == null)
6 throw new ArgumentException("用户不存在!", "UserName");
7
8 // 检查密码是否正确。
9 string pwdHash = EncodePassword(password, user.PasswordSalt);
10 if(pwdHash != user.PasswordHash)
11 throw new ArgumentException("密码错误!", "Password");
12
13 // 设置安全Cookie并进行重定向。
14 FormsAuthentication.RedirectFromLoginPage(userName, rememberMe);
15 }
2 <tr><td>用户名:</td><td><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox></td></tr>
3 <tr><td>密码:</td><td><asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox></td></tr>
4 <tr><td colspan="2">
5 <asp:Button ID="btnLogin" runat="server" Text="登录" onclick="btnLogin_Click" />
6 <asp:CheckBox ID="chkRememberMe" runat="server" Text="记住我" />
7 </td></tr>
8 </table>
9 <asp:Label ID="lblMessage" runat="server"></asp:Label>
2 {
3 try
4 {
5 Membership.Login(txtUserName.Text, txtPassword.Text, chkRememberMe.Checked);
6 }
7 catch(Exception ex)
8 {
9 lblMessage.Text = "错误:" + ex.Message;
10 }
11 }
12
2 {
3 FormsAuthentication.SignOut();
4 Response.Redirect(Request.RawUrl);
5 }