⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reglogin.cs

📁 Microsoft?ASP.NET Programming with Microsoft Visual C#?.NET Version 2003 Step By Step
💻 CS
字号:
using System;
using System.Collections.Specialized;
using System.Data;
using System.Web.Security;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace Chapter_10_Controls
{
	public enum RegLoginMode
	{
		Register,
		Login
	}

	/// <summary>
	/// Summary description for RegLogin.
	/// </summary>
	[ToolboxData("<{0}:RegLogin runat=server></{0}:RegLogin>")]
	public class RegLogin : System.Web.UI.Control, IPostBackDataHandler, IPostBackEventHandler
	{
		private string _userName;
		private string _password;
		private string _passwordConfirm;
		private string _statusMessage;
		private bool _displayRegLink = false;
		private RegLoginMode _mode = RegLoginMode.Login;
	
		public event EventHandler AuthSuccess;
		public event EventHandler AuthFailure;
		public event EventHandler RegSuccess;
		public event EventHandler RegFailure;

		[Bindable(false), Browsable(false)]
		public string StatusMessage
		{
			get
			{
				return _statusMessage;
			}
		}

		/// <summary> 
		/// Render this control to the output parameter specified.
		/// </summary>
		/// <param name="output"> The HTML writer to write out to </param>
		protected override void Render(HtmlTextWriter output)
		{
			switch (_mode)
			{
				case RegLoginMode.Register:
					DisplayRegUI(output);
					break;
				case RegLoginMode.Login:
					DisplayLoginUI(output);
					break;
			}  
		}

		private void DisplayLoginUI(HtmlTextWriter output)
		{
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				"<table>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<tr>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "Username: ");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<td>");
			output.Write(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString);
			output.WriteBeginTag("input");
			output.WriteAttribute("name", this.UniqueID);
			output.WriteAttribute("type", "text");
			output.WriteAttribute("value", _userName);
			output.WriteLineNoTabs(HtmlTextWriter.SelfClosingTagEnd);
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</tr>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<tr>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "Password: ");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<td>");
			output.Write(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString);
			output.WriteBeginTag("input");
			output.WriteAttribute("name", this.UniqueID);
			output.WriteAttribute("type", "password");
			output.WriteLineNoTabs(HtmlTextWriter.SelfClosingTagEnd);
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</tr>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<tr>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<td>");
			output.Write(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString);
			output.WriteBeginTag("input");
			output.WriteAttribute("name", this.UniqueID);
			output.WriteAttribute("type", "button");
			output.WriteAttribute("value", "Submit");
			output.WriteAttribute("OnClick", "javascript:" +
				Page.GetPostBackEventReference(this, "Login"));
			output.WriteLineNoTabs(HtmlTextWriter.SelfClosingTagEnd);
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "<td>");
			output.Write(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString);
			output.WriteBeginTag("input");
			output.WriteAttribute("name", this.UniqueID);
			output.WriteAttribute("type", "reset");
			output.WriteLineNoTabs(HtmlTextWriter.SelfClosingTagEnd);
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</td>");
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				HtmlTextWriter.DefaultTabString + "</tr>");
			if ( _displayRegLink == true )
			{
				output.WriteLine(HtmlTextWriter.DefaultTabString +
					HtmlTextWriter.DefaultTabString + "<tr>");
				output.WriteLine(HtmlTextWriter.DefaultTabString +
					HtmlTextWriter.DefaultTabString +
					HtmlTextWriter.DefaultTabString + "<td colspan='2'>");
				output.WriteBeginTag("a");
				output.WriteAttribute("name", "RegLink");
				output.WriteAttribute("href", "javascript:" +
					Page.GetPostBackEventReference(this, "DisplayRegUI"));
				output.Write(HtmlTextWriter.TagRightChar);
				output.Write("Register");
				output.WriteEndTag("a");
				output.WriteLine(HtmlTextWriter.DefaultTabString +
					HtmlTextWriter.DefaultTabString +
					HtmlTextWriter.DefaultTabString + "</td>");
				output.WriteLine(HtmlTextWriter.DefaultTabString +
					HtmlTextWriter.DefaultTabString + "</tr>");
			}
			output.WriteLine(HtmlTextWriter.DefaultTabString +
				"</table>");
		}

		private void DisplayRegUI(HtmlTextWriter output)
		{
			//Create StringBuilder for concatenating output string
			System.Text.StringBuilder SBOut = new System.Text.StringBuilder();

			SBOut.Append("\t" + "<table>" + "\n");
			SBOut.Append("\t" + "\t" + "<tr>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
				SBOut.Append("\t" + "\t" + "\t" + "Username: " + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<input type='text' " + 
				"name='" + this.UniqueID + "' value='" + 
				this._userName + "'/>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "</tr>" + "\n");

			SBOut.Append("\t" + "\t" + "<tr>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "Password: " + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<input type='password' " + 
				"name='" + this.UniqueID + "'/>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "</tr>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "Confirm Password: " + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<input type='password' " + 
				"name='" + this.UniqueID + "'/>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "</tr>" + "\n");
			SBOut.Append("\t" + "\t" + "<tr>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<input type='button' " + 
				"value='Submit' OnClick=\"jscript:" + 
				Page.GetPostBackEventReference(this, "Register") + 
				"\">" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<td>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "<input type='reset'/>" + "\n");
			SBOut.Append("\t" + "\t" + "\t" + "</td>" + "\n");
			SBOut.Append("\t" + "\t" + "</tr>" + "\n");
			SBOut.Append("\t" + "</table>" + "\n");
			// Send the output to the browser.
			output.Write(SBOut);
		}
		#region IPostBackDataHandler Members

		public void RaisePostDataChangedEvent()
		{
			// TODO:  Add RegLogin.RaisePostDataChangedEvent implementation
		}

		public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
		{
			string[] newValues = postCollection[postDataKey].Split(',');
			bool Result = false;

			switch (Page.Request.Form["__EVENTARGUMENT"])
			{
				case "DisplayRegUI":
					_mode = RegLoginMode.Register;
					break;
				case "Login":
					Result = LoadLoginPostData(newValues);
					break;
				case "Register":
					_mode = RegLoginMode.Register;
					Result = LoadRegisterPostData(newValues);
					break;
			}
			return Result;
		}

		#endregion

		#region IPostBackEventHandler Members

		public void RaisePostBackEvent(string eventArgument)
		{
			switch (_mode)
			{
				case RegLoginMode.Register:
					if ( eventArgument!= "DisplayRegUI" )
					{
						if ( !(SaveCredentials(_userName, _password, _passwordConfirm)) )
						{
							if ( RegFailure!=null )
							{
								RegFailure(this, EventArgs.Empty);
							}
							_mode = RegLoginMode.Register;
						}
						else
						{
							if ( RegSuccess!=null )
							{
								RegSuccess(this, EventArgs.Empty);
							}
							_mode = RegLoginMode.Login;
						}
					}
					break;

				case RegLoginMode.Login:
					// If login is not valid, raise the AuthFailed event
					// and display the link for registration.
					if ( !(VerifyCredentials(_userName, _password)) ) 
					{
						if ( AuthFailure!=null )
						{
							AuthFailure(this, EventArgs.Empty);
						}
					}
					else
					{
						if ( AuthSuccess!=null )
						{
							AuthSuccess(this, EventArgs.Empty);
						}
						FormsAuthentication.SetAuthCookie(_userName, false);
					}
					break;
			}
		}

		#endregion

		private bool LoadLoginPostData(string[] newValues)
		{
			string newUserName="";
			string newPassword="";

			// Get the username
			newUserName=newValues[0];
			// ...and the password
			newPassword=newValues[1];

			// return true if the values have changed
			//  since last postback
			if ( newUserName != _userName || newPassword != _password )
			{
				_userName=newUserName;
				_password=newPassword;
				return true;
			}
			else
			{
				return false;
			}
		}

		private bool LoadRegisterPostData(string[] newValues)
		{
			// Get the user name
			_userName = newValues[0];
			// ...and the password
			_password = newValues[1];
			// ...and the password confirmation
			_passwordConfirm = newValues[2];

			// We don't expect the data to change from
			//  request to request here, so we just
			//  return false
			return false;
		}

		private bool SaveCredentials(string Username, 
			string Password, string PasswordConfirm)
		{
			DataSet LoginDS = new DataSet();
			LoginDS.ReadXml(Page.Server.MapPath("Users.xml"));
			if ( !(LoginDS.Tables[0].Select("username='" + 
				Username + "'").Length > 0 ))
			{
				if ( _password != "" &&
					_password == _passwordConfirm )
				{
					DataRow NewLogin = LoginDS.Tables[0].NewRow();
					NewLogin["username"] = _userName;
					NewLogin["password"] = 
						FormsAuthentication.HashPasswordForStoringInConfigFile(_password, "MD5");
					NewLogin["registerDate"] = DateTime.Today.ToShortDateString();
					LoginDS.Tables[0].Rows.Add(NewLogin);
					LoginDS.WriteXml(Page.Server.MapPath("Users.xml"));
					_statusMessage = "Registration succeeded. Please log in.";
					return true;
				}
				else
				{
					_statusMessage = "No password entered " + 
						"or passwords do not match. Please re-enter.";
					return false;
				}
			}
			else
			{
				_statusMessage = "An identical username exists. Please choose another.";
				return false;
			}
		}

		private bool VerifyCredentials(string Username,
			string Password )
		{
			DataSet LoginDS = new DataSet();
			try
			{
				LoginDS.ReadXml(Page.Server.MapPath("Users.xml"));
			}
			catch ( System.IO.FileNotFoundException )
			{
				CreateBlankUsersFile();
				LoginDS.ReadXml(Page.Server.MapPath("Users.xml"));
			}
			if ( LoginDS.Tables[0].Select("username='" + Username + "'").Length > 0 )
			{
				DataRow[] LoginRow = 
					LoginDS.Tables[0].Select("username='" + Username + "'");
				if ( LoginRow[0]["password"].ToString() ==
					FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "MD5") )
				{
					_statusMessage = "Credentials Validated.";
					return true;
				}
				else
				{
					_statusMessage = "Invalid Password.";
					return false;
				}
			}
			else
			{
				_statusMessage = "Username not found. Have you registered?";
				_displayRegLink = true;
				return false;
			}
		}

		public void CreateBlankUsersFile()
		{
			System.IO.StreamWriter NewXml = 
				System.IO.File.CreateText(Page.Server.MapPath("Users.xml"));

			NewXml.WriteLine("<users>");
			// user field describes a single user
			NewXml.WriteLine("   <user>");
			// date field contains the Registration date
			NewXml.WriteLine("      <registerDate>" + 
				DateTime.Today.ToShortDateString() + "</registerDate>");
			// username field 
			NewXml.WriteLine("      <username>TempUser</username>");
			// password field contains MD5 hash value
			NewXml.WriteLine("      <password>" + 
				FormsAuthentication.HashPasswordForStoringInConfigFile("password", 
				"MD5") + "</password>");
			NewXml.WriteLine("   </user>");
			NewXml.WriteLine("</users>");
			NewXml.Close();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -