惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
SecWiki News
SecWiki News
Know Your Adversary
Know Your Adversary
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
NISL@THU
NISL@THU
WordPress大学
WordPress大学
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threat Research - Cisco Blogs
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
Security Archives - TechRepublic
Security Archives - TechRepublic
有赞技术团队
有赞技术团队
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
V
V2EX
G
GRAHAM CLULEY
TaoSecurity Blog
TaoSecurity Blog
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Latest news
Latest news
The Hacker News
The Hacker News
aimingoo的专栏
aimingoo的专栏
T
Troy Hunt's Blog
S
Schneier on Security
I
Intezer
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
爱范儿
爱范儿
The Register - Security
The Register - Security
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
宝玉的分享
宝玉的分享
Recent Commits to openclaw:main
Recent Commits to openclaw:main
美团技术团队
B
Blog RSS Feed

博客园 - 张远强

原版SQLHelper.cs下载 Chrome浏览器Proxy Switchy、Tampermonkey等扩展程序下载 GreaseMonkey脚本:阻止Google转换搜索链接地址 站在31岁,理解程序员年过三十这道坎 GreaseMonkey让网站登录验证码形同虚设 DateTime.ToString格式限定符转义 借Windows说明Linux分区和挂载点 JSON解析类(C#) 彻底解决ASP.NET MD5加密中文结果和ASP不一致的问题 SharpZipLib使用示例 DotNetZip使用示例 Dvbbs 8.2.0 RC1多功能编辑器,提供下载 B/S系统版本管理V1.0正式发布 ASP.NET 2.0缓存 C#中显/隐式实现接口及其访问方法 C#接口范例 巧用escape解决ASP.NET中URL传参乱码问题 使用Filter实现信息的二次检索 使用overflow代替left截取指定长度字符串
个人网站与动网整合步骤(支持PDO1.0) - 张远强 - 博客园
张远强 · 2007-12-27 · via 博客园 - 张远强

自从发布了"个人网站与动网整合非官方方法"后,经常有网友来咨询动网整合的相关事情,我也常常建议大家好好去看下"PDO通行接口开发人员参考规范1.0",因为一旦你知道了怎么去使用它,就会发现其实整合并不是一件困难的事情,并且比我的非官方方法有更大的灵活性,毕竟去改动网数据库表总不是非常的完美。

一、数据同步原理

假设A、B两个系统要实现会员数据同步,同步过程是这样的:当A系统要注册(登录/注销/资料修改/删除用户)时,就发一条消息告诉B系统说,我要注册(登录/注销/资料修改/删除用户)了,B系统收到消息后在其系统内进行注册(登录/注销/资料修改/删除用户),完成后返回一条消息告诉A系统执行的结果(成功/失败),如果成功,A系统继续在其系统内进行注册(登录/注销/资料修改/删除用户)操作,如果失败则中止本次操作,反之亦然。

1.数据格式

现在我们引进两个词语:请求和响应,对于上述过程中发出消息我们称它为请求,返回消息我们称它为响应。对于请求和响应的数据格式,PDO是有规定的,它应是一个构造良好的xml文档。标准的请求和响应数据格式如下:

1<?xml version="1.0" encoding="gb2312"?>
2<root>
3<appid>程序标识</appid>
4<action>请求类型(用户名检测/注册/登录/注销/资料修改/删除用户)</action>
5<syskey>安全码</syskey>
6<username>用户名</username>
7<可选元素列表 />
8</root>

 1<?xml version="1.0" encoding="gb2312"?>
 2<root>
 3<appid>程序标识</appid>
 4<status>请求结果</status>
 5<needcookie>是否需要写cookie</needcookie>
 6<body>
 7    <message>操作不成功时的错误说明</message>
 8<可选元素列表 />
 9 </body>
10</root>

在请求的XML文档中有些节点是必需的,有些节点是可选的,必需的节点总结如下:

1.注册(reguser):appid,action,syskey,username,password,email,question,answer
2.登录(login):appid,action,syskey,username
3.注销(logout):appid,action,syskey,username
4.资料修改(update):appid,action,syskey,username
5.删除用户(delete):appid,action,syskey,username
6.注册时检测用户名是否可用(checkname):appid,action,syskey,username

在响应的XML文档中有三个节点是必需的:appid,status,message

2.数据如何传递?

对于请求,将使用XMLHttpRequest对象的Send方法以post方式发送,然后再从XMLHttpRequest对象的responseXML属性中获取响应数据。

3.接口安全码

接口安全码(syskey节点)是用来检验程序间传输的数据来源合法性的依据,它的值是由username节点的值和各程序接口配置文件中用户定义的密钥连接起来,再进行16位MD5加密得出一个定长32字节的字符串。

二、动网实现PDO1.0

从第一节的原理中我们可以知道,要支持数据同步,那么每个系统中都必须有请求和响应的程序,这样才能向其他系统发出请求和响应其他系统发出的请求。

对于请求,动网中包含有一个类DvApi,它位于dv_dpo"Cls_DvApi.asp,在各种请求中都使用该类生成请求的XML文档并发送和获取响应值,下边是修改资料的请求:

 1'-----------------------------------------------------------------
 2'系统整合:更新资料(update)
 3'-----------------------------------------------------------------
 4Dim DvApi_Obj,DvApi_SaveCookie,SysKey
 5If DvApi_Enable Then
 6    Set DvApi_Obj = New DvApi
 7        DvApi_Obj.NodeValue "syskey",SysKey,0,False
 8        DvApi_Obj.NodeValue "action","update",0,False
 9        DvApi_Obj.NodeValue "username",txtUserName,1,False
10        Md5OLD = 1
11        SysKey = Md5(DvApi_Obj.XmlNode("username")&DvApi_SysKey,16)
12        Md5OLD = 0
13        DvApi_Obj.NodeValue "syskey",SysKey,0,False
14        DvApi_Obj.NodeValue "password",txtUserPass,1,False
15        DvApi_Obj.NodeValue "email",txtEmail,1,False
16        DvApi_Obj.NodeValue "answer",txtQuestion,1,False
17        DvApi_Obj.NodeValue "question",txtAnswer,1,False
18        DvApi_Obj.SendHttpData
19        If DvApi_Obj.Status = "1" Then
20            Response.write("<script>alert(""" &  DvApi_Obj.Message & """);history.go(-1);</script>")
21            Response.End()
22        End If
23    Set DvApi_Obj = Nothing
24End If
25'-----------------------------------------------------------------

和请求相关的文件还有:dv_dpo"api_user.xml(XML模板)和dv_dpo"Api_Config.asp(接口配置文件)。

对于所有的请求(响应)动网都集中在一个文件中进行处理:dv_dpo.asp,该文件的结构为:

 1<%
 2If Request.QueryString<>"" Then
 3    '处理登录和注销请求,参数以调用外部JS的方式发送(A)
 4Else
 5    Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument" & MsxmlVersion)
 6    XmlDoc.ASYNC = False
 7    If Not XmlDoc.LOAD(Request) Then
 8        Status = 1
 9        Messenge = "数据非法,操作中止!"
10        appid = "未知"
11    Else
12        If CheckPost() Then
13            Select Case Act
14                Case "checkname"
15                    '处理用户名检测请求
16                Case "reguser"
17                    '处理注册请求
18                Case "login"
19                    '处理登录请求(B)
20                Case "logout"
21                    '处理注销请求(C)
22                Case "update"
23                    '处理更新请求
24                Case "delete"
25                    '处理删除用户请求
26            End Select
27        End If
28    End If
29    ReponseData()'生成响应XML文档
30    Set XmlDoc = Nothing
31End If
32%>

通常情况下B、C直接返回status=0(成功)即可,真正的登录和注销操作应在A处,之所以这样主要是由于XMLHttpRequest对象与服务器的会话方式决定的(见参考文章)。

三、准备工作和实现

1.下载动网8.0/8.1版,解压到站点bbs文件内;
8.0版下载:http://down.dvbbs.net/new_Softview/SoftView_5421.asp
8.1版下载:http://forum.dvbbs.net/download/dvbbs8.1.0_ac.exe

2.将动网dv_dpo文件夹和dv_dpo.asp文件夹复制到站点根目录中,并进行以下修改:
① Cls_DvApi.asp:
a. 修改AppID的值
b. 全部Dvbbs.iCreateObject改为Server.CreateObject
② Api_Config.asp:
a. 修改DvApi_SysKey的值,不能用默认的"API_TEST"
③ dv_dpo.asp:
a. 修改XmlDoc.documentElement.selectSingleNode("appid").text的值,一般是和Cls_DvApi.asp中的AppID相同的值。

3.参照动网修改站点注册/登录/注销/资料修改/删除用户相关文件和dv_dpo.asp文件,使其支持系统整合。下边提供一个我已经整合好的一个会员系统,代码不多,应该能看明白:点击下载

4.设置接口配置文件(Api_Config.asp)中相关文件完成整合。

注:如若是整合动网,动易,oblog三系统可用动易小李刀刀的API整合专用用户数据同步工具,下载地址:http://www.powereasy.net/Soft/PE_Plus/210.html

四、参考文章

1.PDO通行接口开发人员参考规范1.0:http://www.mzwu.com/pic/20070817/pdo.htm
2.解读动网、Oblog、动易三方制订的PDO通行接口:http://www.mzwu.com/article.asp?id=1035
3.说说serverXMLHTTP对象与服务器的会话方式:http://www.mzwu.com/article.asp?id=1039