1、 (5) 用户管理支持IP地址的通配符和连接符。2.2 数据库的设计 首先,根据该企业的要求将用户按照访问的对象划分成不同的权限级别;自动登录用户的IP要单独存放,便于查询。因此,在Userid.mdb中建立了两张表(见表1和表2)分别存放用户主要信息和自动登录用户的IP地址。表1 用户信息表(user) 字段名称 数据类型 字段说明 Id 文本 用户名 Password 文本 密码 Access_level 文本 用户类型(用0,1字符串表示) Count 文本 访问次数 Ip_address 文本 IP地址 Menu_name 文本 菜单文件的路径和名称 Op_check 文本 用户附加选
2、项(自动登录、用户修改密码) Del_flag 文本 删除标记(1表示删除) No 文本 用户编号 表2 自动登录IP地址表(Autologin) Ip_address 文本 自动登录的IP地址 在User表中,Access_level字段用以0或1组成的5b字符串表示不同的用户级别(管理员、高级用户、中级用户、普通用户和自定义用户),每一位表示一种级别,“0”无效,“1”有效;如,“10000”表示该用户具有管理员权限;各级别能够访问的对象显示在网页左边的树型菜单控件中,不同的用户显示不同的菜单,菜单的内容存放在相应的文件中,通过Menu_name字段来调用;Ip_address字段支持在I
3、P地址第三、四段使用通配符“*”和连接符“-”,如,“792.168.2.*”, “192.168.151-153.10-100”;Op_check字段用2位0,1字符串表示用户附加选项,如“01”表示允许用户修改密码,“10”表示该用户为自动登录用户。在Autologin表中,Ip_address字段用来存发User中Op_check字段第一位是“1”的用户的IP地址。2.3 系统流程 系统流程图如图一所示。用户登录首先由check.asp获取用户的IP信息,到数据库Userid.mdb的Autologin表中查找该IP信息,到数据库Userid.mdb的Autologin表中查找该IP是否
4、为自动登录的用户。如果是,从User表中获取对应的权限,直接进入系统的主页;如果不是,就进入Login.asp,要求用户输入用户名、密码,通过验证后,获取相应的权限,进入系统主页。check.asp-login.asp 用户访问 判断是否为自动登录 系统L及获取用户权限信息 主 页 用户权限信息 用户数据库 Userid.mdb 图1 用户登录流程 2.4 用ASP.net实现系统 ASP.net提供了内置的Session对象,以用来访问存储于用户的局部会话空间中的变量和对象,可以实现多个网页本地数据的共享和相互间的数据传递;本系统的许多全局信息就是采用这种方式来传递的,如,菜单文件的路径等。
5、当用户通过浏览器访问时,首先使用ASP.net内置的服务器端变量获取用户的IP地址,判断该用户是否为自动登录,实现的代码如下:Ip-ad=reqeest.ServerVariables(“REMOTE_ADDR”) /获得用户ip地址 If CheckIP(ip_ad)Then?Check(ip_ad)?/检验是否为自动登录用户 Session(“passed“)=True /Passed为True表示通过验证 Logon=True /写入日志文件 SetMyFileObject = Server.createobject(“scripting.filesyatemobject”) Physi
6、calpath=Server.MapPath(“global/win.ins”) Set MyTextFile=MyFileObject.OpenTextFile (PhysicalPath,8,true)MyTextFile.WriteLine(now()&”用户名” &ID&“IP地址为“&ip_ad&”自动登录网络”) MyTextFile.Close End if 函数Check(ip_ad)作用是检查IP地址为ip_ad的用户是否为自动登录用户,如果是,就返回true;同时获取该用户对应的权限和级别;如果不是,就返回False。具体代码如下:/实现自动登录用户判断的函数 Functi
7、on CheckIP(ip_ad) /连接Userid.mdb数据库 Set conn=Server.CreateObject(“ADODB.connection”) Param = “driver =Microsoft Access Driver(*.mdb)” Conn.Openparam&”;dbq=”&Server.MapPath(“”userid.mdb”)&; Pwd=access_level” Sql = “Select ip_adress Form autologin” /打开自动登录Autologin表 Set rs = server.CreateObject(“ADODB.
8、Recordset”) Rs.Open sql,conn Rs.CacheSize=5 If rs.EOF then /如果有自动登录用户,则返回False CheckIP = False Rs.close Else Rs.movefirst Do while (not rs.cof) and (flag - false) Flag = Ture Ip_auto=rs(0) /从Autologin表中获得IP地址进行比较 For i=1 to 4 /如果为“*”,则不用比较,实现通配符操作 If Getip (rs(0),i)”*”then /Getip(ip_ad,n)函数,实现了IP地址连
9、接符的使用 If Getip (ip_ad,i)Getip(rs(0),i)then Flag = false Ip_auto=” Next Rs.movenext Loop CheckIP = false If flag = true then /如果在Autologin表中查找到符合太监的记录 If rs.RecordCount=1 then /如果Autologin表中只有一条记录 Rs.MoveFirst If rs.EOF then /如果符合条件的是最后一条记录 Rs.Movel,ast Rs.Move-1 CheckIP = true /设定返回值为True /按查找的IP地址到
10、User表中查找相应的权限 Sql1 = “select * from user Where ip_address = ”&ip_auto&”?” Set rsl = con.execute(sql1) If not rsl.EOF then Counter=cint(rsl(3)+1 /访问计数加1 Session(“ID”)=rsl(“id”) /获取用户名,存入Session变量中共享 /查找用户对应的菜单文件和IP地址以及类型 Set rsl=conn.execute(“update user set count =”&counter&” Where ip_adress = ”&” )
11、 /更新访问次数 Sql2 = “select * from user where ip_adress = ”&set rs2=conn.execute(sql2) session(“access”)=rs2(“Access_level”) /获取权限 Session(“user_menu”)=rs2 (5) /获取用户的菜单文件路径 Session(“user_op”)=rs2 (6) /获取用户的附加选项 Conn.close End Function 函数Getid(ip_ad,n)的作用是实现IP地址第三段和第四段中的连 接符使用,ip_ad为要检查的ip地址变量,n表示要检查的是IP
12、地 址的第n段内容,如果找到则返回对应的值,否则返回999.主要代 码如下:/实现网段连接符-,要把userid和ip_address字段长度改为24 Function Getid(ip_ad,n) If n=1 then I=instr(1,ip_ad,“.”) Getid=mid(ip_ad,l,i-1) If n=3 then I=instr(l,ip_ad,”.”) i=instr(i+1,ip_ad,”.”) j=instr(i+1,ip_ad,”.”) /实现IP地址第三部分网段划分 Ip_3=mid(ip_ad,i+1,j-i-1) If instr(1,ip_3,”-”)=0
13、then /如果第三部分没有使用连接符,就直接赋值 Getip=ip_3 Else i=instr(l,ip_3,”-”) /如果第三部分使用了连接符,则进行分解 J=len(ip_3) Ip_f=mid(ip_3,l,i-1) /获取开始的位置 Ip_b=right(ip_3,j-i) /获取结束的位置 Ip.test = Request.ServerVariables(“REMOTE_ADDR”) /获得用户IP地址 I=instr(l,ip_test,”.”) I=instr(i+1,ip_test,”.”) J=instr(i+1,ip_test,”.”) Ip u=mid(ip_test,i+1,j-i-1) /比较用户的IP地址的第三部分是否符
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1