木子屋 Dnawo's BLOG

Dvbbs在用户注册时缺少对其他整合系统用户名检测解决方法

👤 dnawo 📅 2008-01-23 👁 5301 👍 0 💬 0 🔄 本站原创
一、问题

Dvbbs在用户注册时没有对其他整合系统用户名进行检测,这会导致用系统中存在的用户名进行注册时其他系统注册成功而动网注册失败,结果是其他系统中存在用户名一样的多个用户!这个问题在Dvbbs7.1、8.0、8.1中均存在。

二、分析

一个完整的注册流程应是:

其他系统用户名检测→动网用户名检测→其他系统用户注册→动网用户注册

当然,也可以省略掉第一个步骤:

动网用户名检测→其他系统用户注册→动网用户注册

但是动网现在的注册步骤是:

其他系统用户注册→动网用户名检测→动网用户注册

可以说流程存在问题,也可以说缺少了其他系统的用户名检测。

三、解决方法

打开reg.asp,找到reg_3函数,将系统整合注册部分代码移到动网用户名检测之后即可,修改结果如下(红色部分代码移到了现在的位置):

Rs.Open Sql,Conn,1,3
If Not Rs.Eof Then
	If Request("Forum_Passport")<>"" And Cint(Dvbbs.Forum_Setting(24))=1 Then
		Response.redirect "showerr.asp?ErrCodes=<li>您填写的用户名已经被注册或者已经有用户使用了您填写的电子邮件地址。<li>或者您选择了填写了论坛通行证帐号,但所使用的通行证在本论坛已经被使用,您可以选择使用该<a href=login.asp>通行证登录论坛</a>。&action=OtherErr"
	ElseIf Request("Forum_Passport")<>"" Then
		Response.redirect "showerr.asp?ErrCodes=<li>您填写的用户名已经被注册。<li>或者您选择了填写了论坛通行证帐号,但所使用的通行证在本论坛已经被使用,您可以选择使用该<a href=login.asp>通行证登录论坛</a>。&action=OtherErr"
	ElseIf Cint(Dvbbs.Forum_Setting(24))=1 Then
		Response.redirect "showerr.asp?ErrCodes=<li>您填写的用户名已经被注册或者已经有用户使用了您填写的电子邮件地址。&action=OtherErr"
	Else
		Response.redirect "showerr.asp?ErrCodes=<li>您填写的用户名已经被注册。&action=OtherErr"
	End If
	Exit Sub
Else
	[color=Red]'-----------------------------------------------------------------
	'系统整合
	'-----------------------------------------------------------------
	Dim DvApi_Obj,DvApi_SaveCookie,SysKey
	If DvApi_Enable Then
		'SysKey = Md5(UserName&DvApi_SysKey,16)
		Set DvApi_Obj = New DvApi
			'DvApi_Obj.NodeValue "syskey",SysKey,0,False
			DvApi_Obj.NodeValue "action","reguser",0,False
			DvApi_Obj.NodeValue "username",UserName,1,False
			Md5OLD = 1
			SysKey = Md5(DvApi_Obj.XmlNode("username")&DvApi_SysKey,16)
			Md5OLD = 0
			DvApi_Obj.NodeValue "syskey",SysKey,0,False
			DvApi_Obj.NodeValue "password",pass2,0,False
			DvApi_Obj.NodeValue "email",UserEmail,1,False
			DvApi_Obj.NodeValue "question",quesion,1,False
			DvApi_Obj.NodeValue "answer",Request.form("answer"),1,False
			DvApi_Obj.NodeValue "truename",Request.Form("realname"),1,False
			DvApi_Obj.NodeValue "gender",sex,0,False
			DvApi_Obj.NodeValue "birthday",birthday,0,False
			DvApi_Obj.NodeValue "qq",Qq,1,False
			DvApi_Obj.NodeValue "msn",Request.form("msn"),1,False
			DvApi_Obj.NodeValue "mobile",Request.Form("userphone"),1,False
			DvApi_Obj.NodeValue "homepage",Request.form("homepage"),1,False
			DvApi_Obj.SendHttpData
			If DvApi_Obj.Status = "1" Then
				Response.redirect "showerr.asp?ErrCodes="& DvApi_Obj.Message &"&action=OtherErr"
				Exit Sub
			Else
				DvApi_SaveCookie = DvApi_Obj.SetCookie(SysKey,UserName,Password,Request("usercookies"))
			End If
		Set DvApi_Obj = Nothing
	End If
	'-----------------------------------------------------------------[/color]
	Rs.AddNew
	UserJoinTime = Now()
	Rs("UserName")=username
	Rs("UserPassword")=password
	Rs("UserEmail")=useremail
	Rs("Userclass")=userclass
	Rs("TitlePic")=titlepic
	Rs("UserQuesion")=quesion
	Rs("UserAnswer")=answer
	Rs("TruePassWord")=TruePassWord
	Rs("UserIM")=UserIM
	If Request.Form("Signature")<>"" Then Rs("UserSign")=Dvbbs.Htmlencode(Trim(Request.Form("Signature")))
	Rs("UserPost")=0
	If Dvbbs.Forum_Setting(25)="1" Then
		Rs("UserGroupID")=5
	Else
		Rs("UserGroupID")=Dvbbs.UserGroupID
	End If
	Rs("Lockuser")=0
	Rs("UserSex")=sex
	If birthday<>"" Then rs("UserBirthday")=birthday
	'Rs("UserGroup")=Request.form("UserGroup")
	Rs("JoinDate")=UserJoinTime
	If Request.form("myface")<>"" Then
		Rs("UserFace")=replace(Dv_FilterJS(face),"'","")
	Else
		Rs("UserFace")=replace(Dv_FilterJS(face),"'","")
	End If
	Rs("UserWidth")=Width
	Rs("Usertoday")="0|0|0|0|0"
	Rs("UserHeight")=height
	Rs("UserLogins")=1
	Rs("LastLogin")=UserJoinTime
	Rs("userWealth")=dvbbs.Forum_user(0)
	Rs("userEP")=dvbbs.Forum_user(5)
	Rs("usercP")=dvbbs.Forum_user(10)
	Rs("UserInfo")=userinfo
	Rs("UserSetting")=usersetting
	Rs("UserPower")=0
	Rs("UserDel")=0
	Rs("UserIsbest")=0
	Rs("UserMoney")=0
	Rs("UserTicket")=0
	Rs("UserFav")="陌生人,我的好友,黑名单"
	Rs("IsChallenge")=0
	Rs("UserHidden")=0
	Rs("UserLastIP")=Dvbbs.UserTrueIP
	Rs.Update
	Dvbbs.Execute("Update Dv_Setup Set Forum_UserNum=Forum_UserNum+1,Forum_lastUser='"&Dvbbs.HtmlEncode(username)&"'")
	
End If

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 Google的Sandbox沙盒效应 下一篇 → ASP系统实现自动更新、自动升级