asp.net2.0系统用户验证学习笔记

十一呆着没有意思,近一点的地方能玩的都完了.现在也就只好呆着学习了.今天学习了一下asp.net中的用户验证部分,总结一下也就下面一点东西:

1.asp.net为我们提供了三种验证方式:Forms,Windows,PassPort我们可以在web.config文件中进行配置.如:

<system.web> < authentication  mode ="Forms" > </ authentication ></system.web>

把验证模式mode设为Forms(基本表单验证模式,注意大小写).下面说明一下各种验证模式:

1.表单验证:是一种依赖于cookie的验证模式,允许用户自定义用户名,密码的存储机制,可以是数据库,配置文件也可以是任意xml文件.

2.PassPort验证:是微软提供的一个集中式的验证服务,好象还要收费.

3.Windows验证:主要用于内部网络的一种验证模式,用户使用系统帐号进行登陆

我今天主要学习了一下forms验证模式,扩充一下以前那个留言板程序,实现只有登陆的用户才可以留言的功能.

1.配置站点验证模式为表单验证模式,在其中存储用户和密码对并允许所有用户访问该站点下的所有文件:

< system .web >
    
< authentication  mode ="Forms" >
      
< forms  loginUrl ="manage/Login.aspx"  name =".MyCookie"  protection ="All" >
        
< credentials  passwordFormat ="Clear" >
          
< user  name ="Nev.Jension"  password ="123456" />
        
</ credentials >
      
</ forms >
    
</ authentication >
    
< authorization >
      
< allow  users ="*" />
    
</ authorization >
</ system.web >

2.建立manage子目录,该目录只有通过验证的用户才可以访问.在其下添加longin.aspx和Post.aspx文件.同时在下面添加一个web.config文件以控制该文件文件夹下文件的访问权限

<? xml version="1.0" ?>
< configuration >
< system .web >
    
< authorization >
      
< deny  users ="?" />
    
</ authorization >
</ system.web >
</ configuration >

3.在登陆页面的登陆事件中实现下面代码:

 

  protected   void  Login_Click( object  sender, EventArgs e)
    
{
        
if (IsPostBack)
        
{
            
//使用配置文件中的用户信息验证用户
           if (FormsAuthentication.Authenticate(this.userName.Text, this.userPassword.Text))
            
{
                FormsAuthentication.RedirectFromLoginPage(
this.userName.Text, false);
            }

            
else
            
{
                
this.Label1.Text = "用户名或密码错误";
                
this.Label1.Visible=true;

            }

            
//从数据库中取数据验证用户
            /*UserAuthentication userAuth = new UserAuthentication();
            if (userAuth.Authentication(this.userName.Text,this.userPassword.Text))
            {
                FormsAuthentication.RedirectFromLoginPage(this.userName.Text, false);
            }
            else
            {
                this.Label1.Text = "用户名或密码错误";
                this.Label1.Visible = true;

            }
*/


        }

FormsAuthenticationt提供的验证的主要功能和信息.我采用了在数据库中存储用户信息,密码使用了md5实现加密:

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Data.OleDb;
using  System.Security.Cryptography;

/// <summary>
/// Summary description for UserAuthentication
/// </summary>

public   class  UserAuthentication
{
    
private string conStr=System.Configuration.ConfigurationManager.ConnectionStrings["constr1"].ConnectionString;
    
private OleDbConnection con;
    OleDbCommand command;
    
public UserAuthentication()
    
{
    }

    
public UserAuthentication(string in_constr)
    
{
        
this.conStr = in_constr;
    }

    
/// <summary>
    
/// 用户验证
    
/// </summary>
    
/// <param name="in_userName">用户名</param>
    
/// <param name="in_password">密码</param>
    
/// <returns>true:验证通过</returns>

    public bool Authentication(string in_userName,string in_password)
    
{
        con 
= new OleDbConnection(this.conStr);
        
string sql = "select * from sys_users where name='" + in_userName + "' and password='" + GetMd5CodingString(in_password) + "'";
        command 
= new OleDbCommand(sql,con);
        con.Open();
        OleDbDataReader dataReader 
= command.ExecuteReader();
        
bool result = dataReader.Read();
        dataReader.Close();
        con.Close();
        
return result;
    }

    
/// <summary>
    
/// 用户注册
    
/// </summary>
    
/// <param name="in_userName">名字</param>
    
/// <param name="in_password">密码</param>
    
/// <returns></returns>

    public bool AddUser(string in_userName, string in_password)
    
{
        con 
= new OleDbConnection(this.conStr);
        
string sql = "insert into sys_users(name,[password]) values('" + in_userName + "','" + GetMd5CodingString(in_password) + "')";
        command 
= new OleDbCommand(sql, con);
        con.Open();
        
int i_reuslt = command.ExecuteNonQuery();
        con.Close();
        
return i_reuslt==1;
    }

    
/// <summary>
    
/// 检测用户是否存在
    
/// </summary>
    
/// <param name="in_userName">检测名</param>
    
/// <returns></returns>

    public bool UserExist(string in_userName)
    
{
        con 
= new OleDbConnection(this.conStr);
        
string sql = "select * from sys_users where name='" + in_userName + "'";
        command 
= new OleDbCommand(sql, con);
        con.Open();
        
bool result = command.ExecuteReader().Read();
        con.Close();
        
return result;

    }

    
/// <summary>
    
/// 获得MD5的加密字符串
    
/// </summary>
    
/// <param name="in_str">明文</param>
    
/// <returns>密文</returns>

    public static string GetMd5CodingString(string in_str)
    
{
        MD5CryptoServiceProvider md5 
= new MD5CryptoServiceProvider();
        
byte[] result = md5.ComputeHash(System.Text.Encoding.Unicode.GetBytes(in_str.ToCharArray()));
        
return  BitConverter.ToString(result);
    }

}

为了防止注销后用户后退回去看到管理页面,我弄了半天ie缓存也没怎么弄明白.最后是通过在管理页面中加入如下代码还实现的(是管理页面不在浏览器端缓存)Response.Cache.SetNoStore();这样可能会影响响应速度,不知道各位有没有更好的方法.

今天还发现了一个不错的网站:http://aspalliance.com/

欢迎大家指点,共同学习才是我们的目的.

代码地址:http://www.uploadwiz.com/WIZ118216533

你可能感兴趣的:(asp.net2.0系统用户验证学习笔记)