📄 reglogin.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 + -