设计一个表,里面有3个字段,id varchar(16) primary key,psd varchar(16) not null, email varchar(30) not null.
邮箱这个字段是为了找回密码使用。
一开始我们的数据库里没有任何数据,所以我们是不能直接登录的,我们最开始先写注册。
上面的登录和注册界面中,我们都用到了验证控件。验证控件可以使我们减少代,在之后的几个页面中我们都会用到验证控件。在注册中,我们将邮箱的地址记录到了我们的数据库。当我们忘记密码的时候,就可以通过给邮箱发信息,重置密码。
在这之前,配置我们的web.config,以便连接数据库。
注册的后台代码enroll.aspx.cs
namespace manage
{
public partial class enroll : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
String str = ConfigurationManager.ConnectionStrings["manageConnectionString"].ConnectionString.ToString();
SqlConnection con = new SqlConnection(str);
con.Open();
SqlCommand comselect = new SqlCommand("select id form msg",con);
SqlDataReader rd = comselect.ExecuteReader();
if(rd.Read())
{
Response.Write("已存在该账号,请重新输入");
return;
}
rd.Close();
String insert="insert into mag values('"+TextBox1.Text.ToString()+"','"+TextBox2.Text.ToString()+"','"+TextBox3.Text.ToString()+"')";
SqlCommand cominsert=new SqlCommand(insert,con);
cominsert.ExecuteReader();
con.Close();
Response.Write("");
Response.Redirect("~/enter.aspx");
}
}
}
出现了如下错误
这个错误是我们使用了验证控件报的错。我们有如下方式解决这个问题
1.在使用验证控件的当前页面后台page_load中加这样一句代码:UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
2.修改
在注册的时候,我们其实是可以将 密码加密保存到数据库中的,下面是使用了 md5加密的函数
public static string GetMD5(string str)
{
byte[] b = System.Text.Encoding.Default.GetBytes(str);
b = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(b);
string ret = " ";
for (int i = 0; i < b.Length; i++)
{
ret += b[i].ToString("x").PadLeft(2, '0');
}
return ret;
}
=下面是登录
然后,我们利用控件将登陆界面拖好。这里的登录可以用上我们之前的验证码了。
设置一下imagebutton的属性,CausesValidation=False使它不激发验证事件。具体的验证代码我就不再写了,将我之前写的复制进来。先判断输入的验证码是否为空,然后在判断用户名是否存在,最后判断密码是否正确。下面是enter.aspx.cs代码
namespace manage
{
public partial class enter : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
if (TextBox3.Text.ToLower() == Session["code"].ToString())
{
String str = ConfigurationManager.ConnectionStrings["manageConnectionString"].ConnectionString.ToString();
SqlConnection con = new SqlConnection(str);
con.Open();
string select = "select *from msg where id='"+TextBox1.Text.ToString()+"'";
SqlDataAdapter da = new SqlDataAdapter(select, con);
DataSet add = new DataSet();
da.Fill(add);
if (add.Tables[0].Rows.Count > 0)
{
string strselect = "select * from msg where id='" + TextBox1.Text.Trim() + "' and psd='" + TextBox2.Text.Trim() + "'";
SqlCommand com=new SqlCommand(strselect,con);
SqlDataReader ad = com.ExecuteReader();
Session["id"] = TextBox1.Text;
if (ad.Read())
{
Response.Redirect("~/home.aspx");
}
else
Response.Write("");
}
else
Response.Write("用户名不存在");
}
else
Response.Write("");
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
}
}
在登录成功后我们在home这个界面需要使用session来判断id是否存在,这样子可以防止没有登录可以打开的情况,后面的页面都要用到这个。
修改密码首先要输入原始密码,原始密码正确才能进行修改。下面是修改密码的代码alterpasswordd.aspx
namespace manage
{
public partial class alterpassword : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["id"] != null)
Label1.Text = Session["id"].ToString();
else
Response.Redirect("~/enter.aspx");
}
protected void Button1_Click(object sender, EventArgs e)
{
String str = ConfigurationManager.ConnectionStrings["manageConnectionString"].ConnectionString.ToString();
SqlConnection con = new SqlConnection(str);
con.Open();
string select = "select *from msg where id='" +Session["id"].ToString() + "' and psd='" + TextBox3.Text.Trim() + "'";
SqlDataAdapter da = new SqlDataAdapter(select, con);
DataSet add = new DataSet();
da.Fill(add);
if (add.Tables[0].Rows.Count > 0)
{
if (TextBox2.Text.ToString().Length > 16)
Response.Write("密码不能超出16位");
else if(TextBox1.Text.Trim()==TextBox3.Text.Trim())
{
Response.Write("原始密码与新密码不能一样");
}
else
{
String update = "update msg set psd='" + TextBox1.Text.Trim() + "' where id=" + Session["id"];
SqlCommand cmd = new SqlCommand(update, con);
cmd.ExecuteNonQuery();
con.Close();
Session.Remove("id");
Response.Write("");
}
}
else
Response.Write("当前密码错误");
}
}
}
找回密码首先需要一个界面,已获取账号和邮箱,通过邮箱进行密码的重置。在设置链接失效上,采用了时间戳。先获得发送邮箱时候的时间的时间戳,然后将时间戳变为时间,与当前时间做对比。
private DateTime StampToDateTime(string timeStamp)
{
DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dateTimeStart.Add(toNow);
}//时间戳转时间
private int DateTimeToStamp(DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
} //时间转时间戳
找回密码的代码跟修改密码的代码很相似,这里不多写了。到这里,管理模块基本都完成了。
具体代码https://github.com/1126048156/manage.git