📄 login.aspx.cs
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using DBUtils;
using System.Web.Security;
using System.Text;
using System.Security.Cryptography;
namespace BlueHill
{
/// <summary>
/// login 的摘要说明。
/// </summary>
public class login : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.TextBox txtLoginName;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.TextBox txtPassword;
protected System.Web.UI.WebControls.Button cmdLogin;
protected System.Web.UI.WebControls.Label lblInfo;
//该方法对网页进行初始化
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
//获取用户端的Cookie值,查看是否以前访问过。
HttpCookie objGetCookie = Request.Cookies["BlueHill"];
String strLoginName ="";
if(objGetCookie != null )
{
//如果以前访问过,则获取以前保存的用户名。
strLoginName = objGetCookie.Values["LoginName"];
txtLoginName.Text = strLoginName;
}
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.cmdLogin.Click += new System.EventHandler(this.cmdLogin_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
//当用户点击“登录”按钮时,执行该方法。
private void cmdLogin_Click(object sender, System.EventArgs e)
{
//设立一个用户输入的密码是否正确的标志变量。
bool bValidPassword = false;
//保存哈希后的数据库密码
byte[] arHashedSavedPass =new byte[20];
//Dim userID As Integer
//保存反映数据库操作正确与否的返回值
int iRetValue;
//从数据库中获取用户正确的密码。
iRetValue = Login.GetSavedPassword(txtLoginName.Text, ref arHashedSavedPass);
if( iRetValue == (int) DBResult.Success )
{
//如果数据库操作无误,则验证数据库密码和用户输入的密码。
//对用户输入的密码进行 Unicode 编码。
//在下面的代码中对用户输入的密码进行了哈希处理,采用的是 SHA-1 算法。
//课本第二十四章有对散列数据和 SHA1Managed 类的详细介绍。
UnicodeEncoding UE = new UnicodeEncoding();
byte[] arSuppliedPass= UE.GetBytes(txtPassword.Text);
//对上一步得到的 Unicode 编码值进行哈希处理。
SHA1Managed SHhash=new SHA1Managed();
byte[] arHashSuppliedPass = SHhash.ComputeHash(arSuppliedPass);
//比较数据库密码和用户输入的密码两者的哈希值是否相等。
bool bHashesEqual =true;
int x; //x 为循环变量
for( x = 0; x<= arHashSuppliedPass.Length - 1;x++)
if( arHashSuppliedPass[x] != arHashedSavedPass[x])
{
bHashesEqual =false;
break;
}
if (bHashesEqual)
{
//如果相等,则标志变量为真。
bValidPassword = true;
}
else
{
//否则显示密码错误信息。
lblInfo.Text = "密码错误,请重试!";
}
}
else
{
//如果数据库操作失败,则说明登录名不存在,显示错误信息。
lblInfo.Text = "用户不存在,请重试!";
}
if( bValidPassword)
{
//如果用户登录名和密码都正确,则在会话间保存用户登录信息。
//保存用户登录名。
Session["LogonName"] = txtLoginName.Text;
string strLoginName =txtLoginName.Text;
//新建一个客户端的Cookie 值。
HttpCookie objNewCookie =new HttpCookie("BlueHill");
//设定 Cookie 的有效日期
objNewCookie.Expires = DateTime.Now.AddDays(30);
//添加 Cookie 子项。
objNewCookie.Values.Add("LoginName", strLoginName);
//将 Cookie 值写入客户端
Response.Cookies.Add(objNewCookie);
//从数据库中获取该登录名所对应的员工编号。
int iEmpID = 0;
DBUtils.Login.GetEmployeeID(strLoginName, ref iEmpID);
//在会话间保存该编号信息。
Session["EmployeeID"] = iEmpID.ToString();
string sID = iEmpID.ToString() ;
if (FormsAuthentication.GetRedirectUrl(sID, false).IndexOf("default.aspx") == -1)
{
//如果用户试图访问其他网页,则跳转到该网页。
FormsAuthentication.RedirectFromLoginPage(sID, false);
}
else
{
//如果用户访问的是登录网页,则跳转到“显示员工信息”网页。
FormsAuthentication.SetAuthCookie(sID, false);
Response.Redirect("EmployeeInfo/ShowEmpInfo.aspx");
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -