轻松实现任何程序和动易整合

来源:互联网 发布:用ubuntu怎么写入系统 编辑:程序博客网 时间:2024/04/25 03:01

1:数据库整合,把两个数据库合为一个数据库,增加一个新的数据库链接文件来负责公共数据的连接(4.03以前的版本的整合形式)

2:通行登陆,在两个程序的任意一边注册以后,同时往另一个数据库写入注册信息,或者干脆就是同一个数据库,在注册的地方加上另一个数据库的字段写入。登陆的时候也是,在一边登陆的时候要写入另一个程序的Cookies信息。

以上的方式整合,应该说是比较流畅,而且也的的确确称得上整合。

但是面对动网这样的采用Cookies+Session双重验证,而且还有实时更新的动态密码之后,原来的通行登陆就有点力不从心了,即使解决了,整合要动的手术也太多。

所以逼出一个新的思路,也就是我现在提供的动易2005+动网7.x版整合的这个思路:

1:自动注册、登陆和同步资料:

所有的注册登陆都只在一边进行,不用考虑另一边的问题。比如你不管在动易注册还是在动网注册,都是从动易的注册界面填写信息,然后写入动易的数据库,然后完成动易的登陆,整个过程对动网的数据库和Cookies没有做任何的处理。如果你一直不上论坛,你也就一直是只注册了一边,只登陆了一边。

但是当你第一次进入论坛的时候,论坛首先会检测到你在论坛还没有登陆,同时发现Cookies里有动易已经登陆的Cookie信息。于是从动易的Cookies读取出用户的信息,然后对动网的数据库进行查询,如果已经注册过了,那么就自动完成你的登陆过程(这个步骤只要把动网的登陆过程做少许改动就完成了)。另一种情况,虽然已经注册过了,但是密码并不一样,因为所有注册登陆都已经交给动易来完成了,那么动网采用不同的密码已经没有意义了,于是自动把动网数据库里的密码更新成和动易一样的,然后还是调用动易的Cookies,然后完成登陆;第三种情况就是发现你在动网论坛这边更本没有注册,这时系统就对必须的字段赋予默认值,用户名和密码保留即可,为你完成论坛的注册,然后完成登陆。

这样一来,改动几乎全部集中到了一个程序上——动网,而且改动也非常少。假设你在整合完动网论坛之后还想整合一个其它的程序,也是一样的,首先把你要整合的程序的注册、登陆都转向到动易,然后当用户在动易登陆之后,第一次进入你的程序的时候,读取出动易的Cookies作为登陆信息,然后替用户完成登陆(必要时加上注册),登陆以后就不再需要动易的Cookies了,因为你的程序已经写入了自己的Cookies和Session。这样登陆的效果要比原来的方式好得多,因为是目标程序(比如动网)自己完成的登陆,Cookies和Session的信息很完整,也就不会出现刷新后被踢掉啊,发帖的时候被踢掉之类的问题。

2:整合多套程序,无需额外处理:

无论整合多少个程序,原理都完全一样,并不会因为整合了几个甚至十几个程序,而使得注册的时候要反复操作很多个数据库。

至于注销,是最简单的,因为每套程序基本上都是通过一个Logout文件来实现退出,即不需要参数,也不需要提交信息。这种情况下,连正式访问一下那个页面都不必要,可以用<iframe>来饮用一下那个注销页面,自动就把登陆信息清理得干干净净。如果显你不喜欢Iframe,还可以用script src的方式来调用那个注销文件,效果都是一样的。

3:整合方案中的关键文件:

这套思路,最核心的部分就是找到你要整合的程序的核心代码里那段判断用户登陆的函数,在它判断用户未登陆的地方加上一个对动易cookies的读取,如果读取到了信息,则调用一个从你的程序的注册和登陆文件抄来的函数就可以完成自动注册和登陆了。

这样做还有一个好处就是你只要保证动易的数据库即可,其它的数据库就算资料和动易不统一也没关系。因为只要用户已访问就会自动同步了。

这里把我的思路写出来,希望能起到抛砖引玉的作用,有更多的各种语言的能手写出各种程序的整合来:)

4:动易的信息接口

我这里提供动易的Cookies基本信息:

Cookies标示:动易用Site_Sn表示这是动易的Cookies,Site_Sn的值等于服务器名(比如www.asp163.net)加上动易的安装目录(比如PowerEasy)组合的字串:

www.asp163.net/PowerEasy/

然后整个字串改为小写,并去掉"."和"/"等符号,在上面这个例子中最后得到的是:

Site_Sn = "wwwasp163netpowereasy"

这也就是我的整合要求大家把论坛放在动易子目录下的原因,因为这样可以在论坛的文件中得到当前脚本的路径:www.asp163.net/powereasy/bbs/ 然后把 "/bbs/"和"/"还有"."去掉,就得到了和动易一样的Site_Sn,在任何你需要的时候,就可以通过下面的方式读取动易的Cookies:

UserID = Request.Cookies(Site_Sn)("UserID")
UserName = Request.Cookies(Site_Sn)("UserName")
UserPassword = Request.Cookies(Site_Sn)("UserPassword")
CookieDate =  Request.Cookies(Site_Sn)("CookieDate")

然后用到你的程序中去。

5:把程序装到动易以外的目录

如果你不想把程序装在动易的目录下,那么你也可以在装完动易之后得到你的 strInstallDir,比如上面的例子,strInstallDir = "/PowerEasy"

那么你可以这样写:

Site_Sn = Request.ServerVariables("SERVER_NAME") & "/PowerEasy/"

Site_Sn = LCase(Replace(Replace(Site_Sn,".",""),"/",""))

得到的结果也是一样的。这样你就可以把你的程序装到动易目录以外的地方了。

6:整合非ASP的程序:

由于自动注册、登陆和同步资料是由你的程序自动完成的,因此并不受ASP语言限制,比如你要整合的是PHP程序,你同样可以用PHP的语句来读取动易的Cookies和Site_Sn,然后编写你自己的PHP函数来完成在你的系统的注册、登陆和资料更新,不管是AC、MSSQL还是MSQL或者文本数据,都病不受动易的影响。当你的程序更新升级时,你只要在升级完后把相应的修改再做一遍,整合继续支持,并不是说动易2005支持Dvbbs7.1.0,就不支持Dvbbs8.0,不管你升级到什么版本,整合还是一样的。
整合环境:动易2005SP1正式版+Dvbbs7.1.0_AC正式版

整合前提:两套系统已分别安装调试完毕,均已正常运行

   两套系统均为官方最新标准版本,之前未做任何修改


说明:由于动易2005SP1正式版已内置对整合接口的支持,无需修改

整合接口文件说明:

1:UserInfo.asp ----动易2005用户Cookies通用接口文件
2:PE_User.asp  ----为动网系统特别编写的处理通行注册、登陆、密码同步等事件的文件

整合过程:

1:将UserInfo.asp放到网站根目录下;
2:将PE_User.asp放到论坛根目录下;
3:修改论坛文件

动网7.x版的论坛整合共需修改以下文件:
1. Inc/Dv_ClsMain.asp --核心类文件,修改其以自动监测用户的登陆、注销、注册状态;
2. Conn.asp --核心数据链接及全局类初始化文件,修改其以初始化通行接口的类;
3. login.asp --论坛登陆文件,修改其以实现对通行登陆的支持;
4. logout.asp --论坛注销文件,修改其以实现对通行注销的支持;
5. reg.asp --论坛注册文件,修改其以实现对通行注册的支持;

正式开始修改文件之前,应该明确UserInfo.asp提供的属性和函数,以及PE_User.asp的使用;

[UserInfo.asp]
该文件中定义了实现动易Cookies信息调用的类,用户无需修改,只要将该文件放置到网站根目录,并在任意ASP文件中包含该文件,就可以使用PE_UserInfo这个类,并通过读取该类提供的8个公用属性和1个公用函数来调用动易的相关资料。列举如下:

公用属性:
  PE_Dir: 动易的安装目录;
  Site_Sn: 动易的Cookies名称;
  UserName: 已经登陆动易的当前用户的用户名
  Password: 已经登陆动易的当前用户的密码(16位MD5加密形式)
  Email: 已经登陆动易的当前用户的Email
  Question: 已经登陆动易的当前用户的密码提示问题
  Answer: 已经登陆动易的当前用户的密码提示问题答案(16位MD5加密形式)
  CookieDate: 已经登陆动易的当前用户设置的Cookies保存选项(0=不保存;1=保存1天;2=保存一月;3=保存一年)

公用函数:
  Sex(ctype):已经登陆动易的当前用户的性别。
  说明:该函数包含一个数值型参数,取值范围0-2(0=返回数字形式:0表示女性,1表示男性;1=返回字符形式:"男"表示男性,"女"表示女性; 2=返回字符形式:"male"表示男性,"female"表示女性)

[PE_User.asp]
该文件根据所接收到的URL请求的action来判断并执行相应的操作。
action:
reg: 当收到action=reg的URL请求时,会提示用户输入密码激活论坛身份;
login: 当收到action=login的URL请求时,会自动进行同步登陆(密码必须一致)
pass: 当收到action=pass的URL请求时,会提示用户输入论坛密码以进行登陆
pass3: 当收到action=pass3的URL请求时,会自动将论坛密码改为和用户的动易密码一样,并进行登陆
了解了通用接口和PE_User.asp之后,接下来修改论坛文件以完成整合:

1.Conn.asp
Conn.asp通常是论坛程序定义数据库链接的文件,因此这个文件中定义的变量、函数、过程可以在任何文件中使用,所以我们选择把通用接口类的初始化放在这个文件中。

a)在Conn.asp的第5行左右,找到
  =========查找代码========
  Option Explicit
  Response.Buffer = True
  Dim Startime
  =========================
   修改为:
  ===========修改后的代码==========
  Option Explicit
  Response.Buffer = True
  %>
  <!-- #Include Virtual="UserInfo.asp" -->
  <%
  Dim Startime
  =============================
b)在Conn.asp的第7、8行左右,找到
  =========查找代码============
  Dim Conn,Plus_Conn,Db,MyDbPath
  Startime = Timer()
  =============================
   修改为:
  ===========修改后的代码==========
  Dim Conn,Plus_Conn,Db,MyDbPath
  '定义动易通用接口类
  Dim MyPE
  '完毕
  Startime = Timer()
  =================================
c)在Conn.asp的32、33行左右,找到
  =========查找代码============
  Set template = New cls_templates
  Sub ConnectionDatabase
  =============================
   修改为:
  ===========修改后的代码==========
  Set template = New cls_templates
  '初始化动易通用接口类
  Set MyPE = New PE_UserInfo
  '完毕
  Sub ConnectionDatabase
  =================================

  Conn.asp的修改完毕

2.Inc/Dv_ClsMain.asp
Dv_ClsMain.asp中是动网论坛定义了动网论坛所有核心的类和属性等,每次用户刷新一个页面,都会由这个文件中的函数、事件等来判断是否登陆等信息,因此我们要把检测和判断登陆、注册、注销等放在这个文件中:

a)在Dv_ClsMain.asp的704-706行找到:
  =========查找代码============
  '当在120秒内刷新同一个页面则不更新online数据
  If DateDiff("s",ReflashPageLastTime,Now()) < 120 And LastVisiBoardID = BoardID  And Not InStr(ScriptName,"showerr")>0 Then Exit Sub
  '更新数组
  =============================
   修改为:
  ===========修改后的代码==========
  '当在120秒内刷新同一个页面则不更新online数据
  '当通行注册和通行登陆时,避开120内刷新同一页面的限制
  If Instr(ScriptName,"index") <= 0 or Instr(ScriptName,"pe_user") <= 0 or Instr(ScriptName,"log") <= 0 or Instr(ScriptName,"reg") <=0 Then
   If DateDiff("s",ReflashPageLastTime,Now()) < 120 And LastVisiBoardID = BoardID  And Not InStr(ScriptName,"showerr")>0 Then Exit Sub
  End If
  '完毕
  '更新数组
  =================================

b)在Dv_ClsMain.asp的1039行到1040行,找到Footer过程的结束部分:
  =========查找代码============
   Response.Write Tmp
  End Sub
  =============================
   修改为:
  ===========修改后的代码==========
   Response.Write Tmp
   '检测通行登陆与注销
   If IsArray(Session(CacheName & "UserID")) And UserID = 0 And Instr(ScriptName,"pe_user") <= 0 And Instr(ScriptName,"log") <= 0 And Instr(ScriptName,"reg") <= 0 And Instr(ScriptName,"admin") <= 0 And Instr(ScriptName,"showerr") <=0 Then
    If MyPE.UserName <> "" And MyPE.Password <> "" Then
     Call PE_User("in")
    End If
   Else
    If MyPE.UserName = "" or MyPE.Password = "" Then
     Call PE_User("out")
    End If
   End If
   '完毕
  End Sub
  =================================
c)在Dv_ClsMain.asp的1521-1522行找到Class Cls_Forum的结束部分:
  =========查找代码============
   End Sub
  End Class
  =============================
   修改为:
  ===========修改后的代码==========
   End Sub

   '支持动易的整合函数
   Sub PE_User(aAction)
    Response.Write "<script language='JavaScript'>" & vbCrLf
    If aAction = "in" Then
     Dim rsPE
     Set rsPE = Execute("SELECT UserName,UserPassword FROM Dv_User WHERE UserName='" & MyPE.UserName & "'")
     If rsPE.EOF and rsPE.BOF Then
      Response.Write "window.location.href='PE_User.asp?action=reg';" & vbCrLf
     ElseIf rsPE(1) = MyPE.Password Then
      Response.Write "window.location.href='PE_User.asp?action=login';" & vbCrLf
     Else
      Response.Write "window.location.href='PE_User.asp?action=pass';" & vbCrLf
     End If
    Else
     Response.Write "window.location.href='logout.asp';" & vbCrLf
    End If
    Response.Write "</script>" & vbCrLf
   End Sub
   '完毕
  End Class
  =================================
3.login.asp
login.asp是动网论坛显示登陆界面、完成登陆检验等和登陆相关的一系列事务的文件,我们需要修改它以支持通行登陆:

a)在login.asp的18-19行找到以下代码:
  =========查找代码============
  Case "chk"
   Dvbbs_ChkLogin
  =============================
   修改为:
  ===========修改后的代码==========
  Case "chk"
   '如果不是通行登陆,要求用户先登录主站
   If trim(request("pe")) = "" Then Response.redirect "showerr.asp?ErrCodes=<li>您必须登陆主站以后才能登陆论坛&action=OtherErr"
   '完毕
   Dvbbs_ChkLogin
  =================================
b)在login.asp的55-56行找到以下代码:
  =========查找代码============
  End If
  TempStr = Replace(TempStr,"{$comeurl}",Comeurl)
  =============================
   修改为:
  =========修改后的代码============
  End If
  ComeUrl = Dvbbs.Get_ScriptNameUrl & ComeUrl
  Response.Redirect MyPE.PE_Dir & "User/User_Login.asp?ComeUrl="&ComeUrl
  TempStr = Replace(TempStr,"{$comeurl}",Comeurl)
  =============================    
c)在login.asp的97-100行找到以下代码:
  =========查找代码============
  Else
   password=md5(trim(Dvbbs.CheckStr(request("password"))),16)
   If Request("password") = "" Then password = ""
  End If
  =============================
   修改为:
  =========修改后的代码============
  '当不是自动登陆时,加密用户输入的密码
  ElseIf Request.Form("pe") <> "true" Then
   password=md5(trim(Dvbbs.CheckStr(request("password"))),16)
   If Request("password") = "" Then password = ""
  '自动登录时,不加密Cookies中已加密的密码
  Else
   password=trim(Dvbbs.CheckStr(request("password")))
  '完毕
  End If
  =============================

4.logout.asp
logout.asp实现的功能是用户注销,我们只要在任何时候让用户跳转到这个页,他就会被注销,我们在这个文件中加入同步注销动易登陆的代码:

a)在logout.asp的33-34行找到以下代码:
  =========查找代码============
  Response.Cookies(Dvbbs.Forum_sn)("usercookies")=""
  Session(Dvbbs.CacheName & "UserID")=Empty
  =============================
   修改为:
  =========修改后的代码============
  Response.Cookies(Dvbbs.Forum_sn)("usercookies")=""
  '清理动易的Cookies
  Response.Cookies(MyPE.Site_Sn)("UserName")=""
  Response.Cookies(MyPE.Site_Sn)("UserPassword")=""
  Response.Cookies(MyPE.Site_Sn)("LastPassword")=""
  Response.Cookies(MyPE.Site_Sn)("CookieDate")=""
  Response.Cookies(MyPE.Site_Sn)("Email")=""
  Response.Cookies(MyPE.Site_Sn)("Question")=""
  Response.Cookies(MyPE.Site_Sn)("Answer")=""
  Response.Cookies(MyPE.Site_Sn)("Sex")=""
  '完毕
  Session(Dvbbs.CacheName & "UserID")=Empty
  =============================
 
5.reg.asp
reg.asp是动网论坛注册、全网认证注册等和注册有关的功能集中实现的文件,我们只要修改这个文件,就可以实现通行注册的全部修改:

a)在reg.asp的35-36行,找到如下代码:
  =========查找代码============
  If request("action")="apply" Then
   Dvbbs.stats=Stats(2)
  =============================
   修改为:
  =========修改后的代码============
  If request("action")="apply" Then
   '引导其到动易进行注册
   Response.Redirect MyPE.PE_Dir & "Reg/User_Reg.asp"
   '完毕
   Dvbbs.stats=Stats(2)
  =============================
b)在reg.asp的47-48行找到如下代码:
  =========查找代码============
  Else
   Dvbbs.stats=Stats(1)
  =============================
   修改为:
  =========修改后的代码============
  Else
   '引导用户到动易进行注册
   Response.Redirect MyPE.PE_Dir & "Reg/User_Reg.asp"
   '完毕
   Dvbbs.stats=Stats(1)
  =============================
c)在reg.asp的243-244行找到如下代码:
  =========查找代码============
   answer=Request.form("answer")
  Else
  =============================
   修改为:
  =========修改后的代码============
   answer=Request.form("answer")
  '当来自通行注册的自动注册时,不加密Cookies中已加密的提示问题答案
  Elseif Request.form("pe") <> "" Then
   answer=Request.form("answer")
  '完毕
  Else
  =============================

至此,5个需要修改的论坛已经全部修改完成。整合也已完成。如果论坛中原来就已经有注册用户,可以用《动易2005整合专用用户数据同步工具》把论坛的注册用户同步到动易的数据库即可。