现在的位置: 首页 > 综合 > 正文

动网论坛7.1彻底研究

2013年10月27日 ⁄ 综合 ⁄ 共 2438字 ⁄ 字号 评论关闭

文件名:Dv_ClsMain.asp
该文件是动网非常经典的部分,它被包含在动网论坛几乎所有的程序中。
主要功能:
1、定义Cls_Forum类
2、定义cls_Templates类
3、定义cls_UserOnlne类

分析:
1、定义Cls_Forum类
该类定义了非常多的共有和私有变量、属性以及过程和函数。直接分析变量是种痛苦的事情。下面就分别从过程、函数

、属性作为切入点进行分析。复杂非常,作好心理准备。

Class_Initialize,顾名思义,初始化Cls_Forum类(实际上是个构造函数,在类被实例化的时候首先自动执行),通过

设置或读取初始化变量
首先,判断客户端是否仍连接在服务器上,如果已经断开,没必要进行下面的任何操作:
If Not Response.IsClientConnected Then Response.End

IsUserPermissionOnly:

IsUserPermissionAll:

ShowErrType:错误信息显示模式,在showerr.asp中得到具体应用,并且可以通过Dv_ClsMain.asp的ErrType属性进行
设置

savelog:设置为1的时候会记录攻击或错误错信息。在Dv_ClsMain.asp中得到具体应用。

SqlQueryNum:数据库查询次数

Reloadtime:共有变量,缓存过期时间,这里是28800

CacheName :缓存组的总名称,这里是

Lcase(Replace(Replace(Replace(Server.MapPath("index.asp"),"index.asp",""),":",""),"//",""))

IsTopTable:

Forum_sn :
VipGroupUser:是否VIP组成员组
Vipuser = False :是否是VIP会员

Boardmaster = False :是否是版主

Superboardmaster = False:

Master = False:

FoundIsChallenge = False:

FoundUser = False

BoardID = Request("BoardID") :获取传进的版面ID

如果直接进入的是首页或其他情况下,当然不会传入BoardID了,所以:
If IsNumeric(BoardID) = 0 or BoardID = "" Then BoardID = 0

如果传入的BoardID是数字则(在这种情况下,Request("BoardID")是字符串,所以):
BoardID = Clng(BoardID)

然后读取cookie:
MemberName = checkStr(Trim(Request.Cookies(Forum_sn)("username"))):用户名(checkStr函数过滤单引号)
MemberWord = checkStr(Trim(Request.Cookies(Forum_sn)("password"))):密码
UserHidden = Trim(Request.Cookies(Forum_sn)("userhidden")):隐身属性(1-隐身,2-正常)
UserID = Trim(Request.Cookies(Forum_sn)("UserID")):用户ID

如果隐身属性为空为字符串“0”则说明隐身属性无效,重新设置:
If IsNumeric(UserHidden) = 0 or Userhidden = "" Then UserHidden = 2

如果用户ID为空或为字符串“0”则说明用户未登陆或已超时,所以:
If IsNumeric(UserID) = 0 Or UserID="" Then UserID=0

然后处理一下UserID:
UserID = Clng(UserID)

获取真实IP:
UserTrueIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If UserTrueIP = "" Then UserTrueIP = Request.ServerVariables("REMOTE_ADDR")
UserTrueIP = CheckStr(UserTrueIP)

获取脚本路径:
Dim Tmpstr
Tmpstr = Request.ServerVariables("PATH_INFO")
Tmpstr = Split(Tmpstr,"/")
ScriptName = Lcase(Tmpstr(UBound(Tmpstr)))
ScriptFolder = Lcase(Tmpstr(UBound(Tmpstr)-1)) & "/"
PATH_INFO服务器变量客户端提供的额外路径信息。可以使用这些虚拟路径和 PATH_INFO 服务器变量访问脚本。

获取用户等级:
MemberClass = checkStr(Request.Cookies(Forum_sn)("userclass"))

Page_Admin=False :该变量用的地方有点多,待总结

模拟HTML部分:略

class_terminate:在类卸载时触发该函数(析构函数)
释放缓存:
If NodeUpdate Then
Application.lock
Set Application(CacheName&"_Boradlist")=BoardXML.cloneNode(True)
Application.unlock
End If
释放数据集和数据库连接对象,以及临时对象BoardXML:
Set BoardXML = Nothing
If IsObject(Conn) Then Conn.Close : Set Conn = Nothing
If IsObject(Plus_Conn) Then Plus_Conn.Close : Set Plus_Conn = Nothing

Name属性: 定义缓存对象名称,只写属性
value属性: 读取和写入缓存数据
ObjIsEmpty()函数:判断当前缓存是否过期
DelCahe(MyCaheName)方法:手工删除一个缓存对象,参数是缓存对象的名称。

 

抱歉!评论已关闭.