ASP.NET如何实现服务器端身份验证和客户端状态管理?(Session机制和Cookie)

来源:互联网 发布:单片机论坛网 编辑:程序博客网 时间:2024/06/05 06:07


Session保存在服务器端,Cookie保存在客户端,Session是针对每个用户(会话)有效,生命周期从用户开始访问服务器开始,到用户断开服务器的连接终止。

Cookie是由服务器生成,发送给浏览器,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发

送该Cookie给服务器(前提是浏览器设置为启用Cookie)

存储在客户端浏览器上的小量信息 <4k(单个Cookie对象要小于4k)

SessionID其实就是通过Cookie传输的。



1.先要在配置文件中配置链接数据库:Web.config

 <connectionStrings>

<!--连接数据库 -->
    <add name="DBConn" connectionString="data source=.;Integrated Security=SSPI;
         database=StudentManager" providerName="System.Data.SqlClient"/>
    
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

2.新建一个类,类中写一个方法,用ADO.NET技术来实现对数据库的查询,数据库中存在一个保存用户名和密码的表

  public bool GetUserInfo(string UserName,string UserPassWord)
        {
            string sql = "select * from tb_UserPwd where UserName=@UserName and UserPassWord=@UserPassWord";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@UserName", UserName);
            cmd.Parameters.AddWithValue("@UserPassWord", UserPassWord);
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
           bool flag= reader.Read();
           conn.Close();
           return flag;
        }
    }
    public class UserInfo
    {
        public string UserName { get; set; }
        public string UserPassWord { get; set; }
    }

3.在web窗体的后台代码中,实现对客户端状态管理的逻辑

 StudentManager DB = new StudentManager();//实例化类
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //设置cookie之后,在第二次访问的时候要读取cookie
                if (Request.Cookies["myusername"] != null)
                {
                    this.txtUserName.Text =Request.Cookies["myusername"].Value;
                }
            }
        }

     /// <summary>
        /// 设置cookie保存用户名
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLogin_Click(object sender, EventArgs e)
        {
            //声明两个变量来接收用户名和密码框
            string UserName = this.txtUserName.Text.Trim();
            string PassWord = this.txtPassword.Text.Trim();
             bool flag= DB.GetUserInfo(UserName,PassWord);//从数据库中查询用户名和密码
             if (flag == true)
             {
                 Session["UserName"] = UserName;
                 Response.Write("<script>location.href='defaultMaster.aspx';</script>");
                 if (this.CheckBox1.Checked == true)//判断记住用户名的复选框是否被选中,true,为真
                 {
                     HttpCookie username = new HttpCookie("myusername", this.txtUserName.Text);
                     username.Expires = DateTime.Now.AddDays(15);//设置Cookie的过期时间
                     Response.Cookies.Add(username);
                 }
             }
             else//如果用户名和密码错误,给出提示信息
             {
                 Response.Write(@"<script>alert('对不起!登录失败!\r请检查您的用户名和密码是否正确!');</script>");
                 this.txtUserName.Text = "";
                 this.txtPassword.Text = "";
                
             }
             
        }


本人第一次发表,有很多需要改进和不足的地方,还请大家多多关照。本人将虚心接受大家的意见和批评!

0 0
原创粉丝点击