分类目录归档:所谓技术

什么叫实践派?就是什么都没正经学过,概念都没搞懂可是偏偏能弄出点动静来。

解决整合问题的一个特殊案例

  今天做技术支持的时候,有个客户的整合出现一个很怪异的情况:

  动网、动易、博客三方整合,其它所有的都很成功,唯独一点,就是在动易首页注销的时候就出现服务器无响应。

  我直接访问/User/User_Logout.asp退出没有问题,那就是Ajax部分的问题了,于是我访问/User/User_Logout.asp?action=xml,结果发现返回的xml数据包是空的,没有必要的用户名和密钥等信息。

  检查用户的/User/User_Logout.asp,发现和最新版本的文件一致。再检查用户的/JS/checklogin.js文件,除了显示风格的html代码部分有修改,其它的也和最新版本一致。这就奇怪了。

  我让客户把动易的整合暂时禁用,再测试发现一切正常。肯定是/User/User_Logout.asp文件处理xml请求的部分出错了,但是文件本身没错,难道接口有问题?

  我让他把动易的/API/API_Config.asp发给我,结果发现这个文件是旧版本的,他告诉我是4月22日下载的。换成SP3的文件(该文件是在SP2的时候更新的)后,问题解决。

SP2以前的API/API_Config.asp文件和SP2以后的文件比较如下:

旧文件

Dim arrAPIUrls
arrAPIUrls = Split(API_Urls,"|")

新文件

Dim arrAPIUrls, arrUrlsSP2
arrUrlsSP2 = "blank"
arrAPIUrls = Split(API_Urls,"|")
Dim tempIndex,tempAPIPath
For tempIndex = 0 To UBound(arrAPIUrls)
    tempAPIPath = Split(arrAPIUrls(tempIndex),"@@")
    arrUrlsSP2 = arrUrlsSP2 & "|" & tempAPIPath(1)
Next
arrUrlsSP2 = Replace(arrUrlsSP2,"blank|","")
arrUrlsSP2 = Split(arrUrlsSP2,"|")

结论:用户在每次升级动易系统以后,不需要单独下载额外的整合接口(除非我在官方论坛单独发布补丁并说明什么情况下需要使用),因为动易的最新整合接口会包含在每次发布的新版本中。也就是动易不需要单独的整合接口文件。

再答关于整合后的MSXML错误问题

注意:本文适用于整合已经成功,偶尔出现500错误,提示MSXML错误,或者在本地测试整合成功,传到服务器上后出错的用户。

症状描述(蓝色部分根据用户的服务器情况会有不同,有时候出问题的是动网或者oblog的文件):

错误类型:
msxml3.dll (0x80072EE7)
The server name or address could not be resolved
F:POWEREASYUSER../API/API_Function.asp, 第 290 行

继续阅读

关于动易子域名问题

动易的子域名功能在使用中也遇到了不能共享用户状态的问题,壮志指示我按照上次我提到的方法尝试一下能否解决。

根据子域名共享Cookies的特点,首先要保证写入Cookies要对根域进行指定,动易是一个通用型建站程序,用户的域名我们并不能提前知道,用自动监测的方式也会比较麻烦,所以最好的办法是由用户指定。另外一个问题在于动易的Cookie名——Site_Sn,这个变量是通过动态获取的,也就是当使用不同域名访问的时候,Site_Sn的值不同,那么即使子域名下的页面可以共享Cookies,也不能正确读取到Cookies的值。

继续阅读

统一接口专用用户同步工具正式版

今天是20号了,这个工具很多朋友大概通过测试版的升级提示和动易SP1已经拿到了,我这里象征性地“发布”一下:)

版本说明: 原来的同步工具最后更新的版本号为v1.3rtm,这次发布的版本文件名、工具名继续承袭上一版本,但是由于针对的系统,工具的全部代码和界面都重新设计了,所以版本号从2.0开始。

继续阅读

统一接口专用用户同步工具测试版

最近上网比较少,但是一直在弄这个程序,本来应该在上周末发布的,但是由于自己的一些事情,耽误了。周一回来又修改了一下。现在先发布出来给大家用用看。

因为测试的时候我的电脑上只有三个AC数据库,而且都是超小数据的,所以这个程序还没有经过大数据的测试。目前发布的这个版本是为了尽可能多地在各种数据情况下测试,避免像原来版本一样遇到特殊的用户资料就会导致未知错误。所以这版里注释了几户所有的容错代码,运行过程中很容易出现各种500错误。

继续阅读

本条目发布于。属于所谓技术分类。

再战子域共享Cookie问题

昨天贾宁旨光临寒舍,吃过晚饭回来后就跟他聊天,后来又玩了一会儿《Black Hawk Down》对战,到了大概晚上11点多,开始继续尝试用 Response.Cookies.Domain 来解决子域共享 Cookie 的问题。

继续阅读

本条目发布于。属于所谓技术分类。

关于整合后动易后台不能修改用户信息的解决

大家知道整合三方都发布是在4月14号,而动易2006的最后一次更新是4月10日,组件最后更新是4月11日。动易后台与整合相关的代码是在4月7号左右封装到组件里的,之后就没动过了。

但是三方统一接口规范在后来做了调整。因此按4月7日前的讨论稿写的动易后台的整合接口就和现行规范不一致了,发送的是32位大写的MD5密码,导致在论坛和博客的接口返回安全码校验失败的问题。

已经把问题转告了悟空和感觉,要求他们在接口中增加对安全码长度和大小写的处理。在三合一文件包中的动网和oblog接口,已经增加了长度判断处理的大小写处理。如果是先整合的出现了这个问题,可以用三合一文件包中的文件来解决。

动易2006通行接口更新记录及下载

最新文件下载:

/works/PDO_API_TIO.rar [文件更新日期:2006-04-18](年代久远,链接已取消)

更新记录:

4月11日:

 'API_Response.asp:
    If sPE_Items(conUserstatus,1) = "1" Then
        rsReg("IsLocked") = True
    Else
        rsReg("IsLocked") = False
    End If
'说明:解决同步注册默认状态为锁定的问题。

'User/User_Logout.asp
Action = Trim(Request("action"))
Dim MemberName,APISysKey
MemberName = Request.Cookies(Site_Sn)("UserName")
APISysKey = MD5(MemberName&API_Key,16)
'Response.Cookies(Site_Sn)("UserName") = ""
Response.Cookies(Site_Sn)("UserPassword") = ""
Response.Cookies(Site_Sn)("LastPassword") = ""
'说明:解决注销时取不到用户名而不能注销的问题

'JS/checklogin.js
function getAPIUrls(root,username,userpass){
 var strTempHTML = "";
 var iName,iPass;
 var syskey = root.item(0).getElementsByTagName("syskey").item(0).text;
 var savecookie = root.item(0).getElementsByTagName("savecookie").item(0).text;
 if (savecookie != "") {
  savecookie = "&savecookie=" + savecookie;
 }else{
                savecookie = "&savecookie=";
        }
 if (syskey != "" && username != "") {
  iName = "&username=" + username;
  if (userpass != "") {
   iPass = "&password=" + userpass;
  }else{
                        iPass = "&password=";
                }
  var iUrls = root.item(0).getElementsByTagName("apiurl");
  for (var i=0; i<iUrls.length; i++){
   strTempHTML += "<iframe frameborder="0" width="1" height="1" src="" + iUrls.item(i).text + "?syskey=" + syskey + iName + iPass + savecookie + "" />";
  }
 }
 return strTempHTML;
}'说明:解决多个程序整合时不能同步的问题

4月12日:

'API/API_Response.asp
Select Case sPE_Items(conUserstatus,1)
    Case "0"
        tRs("Islocked") = False
        tRs("GroupID") = GroupID_ok
    Case "4"
        tRs("Islocked") = True
        tRs("GroupID") = GroupID_chk
    Case "1"
        tRs("IsLocked") = True
        tRs("GroupID") = GroupID_ok
    Case Else
        tRs("IsLocked") = True
        tRs("GroupID") = GroupID_ok
End Select '补充对锁定用户的请求的处理过程

         'User/User_GetPassword.asp
         If rsGetPassword("Answer") <> MD5(Answer, 16) Then
            '对动网加密结果的兼容处理
            MD5OLD = 0
            If rsGetPassword("Answer") <> MD5(Answer,16) Then
             
FoundErr = True
             ErrMsg = ErrMsg & "<br><li>对不起,您的答案不对!</li>"
            End If
            MD5OLD = 1

        End If
        '说明:增加对动网加密结果的兼容处理

'/User/User_ChkLogin.asp
            UserPassword = MD5(UserPassword, 16)
            Set rs = Server.CreateObject("adodb.recordset")
            sql = "select UserID,UserName,UserPassword,LastPassword,LastLoginIP,LastLoginTime,LoginTimes from PE_User where UserName='" & UserName & "'"
            rs.Open sql, Conn, 1, 3

'=================================================
                    Dim tempPassword
                    tempPassword = sPE_Items(conPassword,1)
                    MD5OLD = 0
                    tempPassword = MD5(tempPassword,16)
                    Md5OLD = 1
                    If tempPassword <> rs(2) Then
                       
FoundErr = True
                        ErrMsg = ErrMsg & "{a}密码错误!!!{b}"
                    Else
                        rs("UserPassword") = UserPassword
                    End If
'说明:增加对动网方式Md5加密的兼容

Md5.asp更换新文件

 4月17日:

'/User/User_Info.asp

    Response.Write "        <input name='UserName' type='hidden' id='UserName' value='" & UserName & "'>" & vbCrLf
    Response.Write "        <input name='Action' type='hidden' id='Action' value='SavePwd'>" & vbCrLf
    Response.Write "        <input name='Submit' type='submit' id='Submit' value=' 保 存 '>" & vbCrLf

'===================================
    If API_Enable Then
        If createXmlDom Then
            sPE_Items(conAction,1) = "update"
            sPE_Items(conUsername,1) = UserName
            sPE_Items(conPassword,1) = Password
            prepareXml True
            SendPost
            If FoundErr Then
                ErrMsg = "<li>" & ErrMsg & "</li>"
            End If
        Else
            FoundErr = True
            ErrMsg = "<li>用户服务当前不可用。 [APIError-XmlDom-Runtime]</li>"
        End If
    End If

    If FoundErr = True Then
        Exit Sub
    End If

'说明:修正在会员中心点“修改密码”进行密码修改不生效的问题。增加判断避免远程修改失败后在本地修改。

 4月18日:

'/User/User_ChkLogin.asp

If FoundErr <> True Then
    '保存用户名
    TempUserName = UserName

    If CheckUserLogined() = False Then
        If Action = "xmlstat" Then
            FoundErr = True
            ErrMsg = ""
        Else
            '恢复可能被替换的用户名
            UserName = TempUserName

            sPE_Items(conPassword,1) = UserPassword
            UserPassword = MD5(UserPassword, 16)
'解决由于缓存不能换名登陆的问题 

4月19日

'/Reg/User_RegPost.asp

                        tempAPIScripts = tempAPIScripts & "<script type=""text/javascript"" language=""JavaScript"" src=""" & arrAPIUrl(1) & "?syskey=" & sPE_Items(conSyskey,1) & "&username=" & UserName & "&password=" & Md5(sPE_Items(conPassword,1),16) & """></script>"

'解决注册成功不能自动登陆论坛和博客的问题

4月22日:

'/API/API_Response.asp

    For intIndex = 7 to 20
        If intIndex <8 Or intIndex > 10 Then
            If sPE_Items(intIndex,1) <> "" Then
                NeedContacter = True
                Exit For
            End If
        End If
    Next

'修正一个程序逻辑上的错误,解决在动网和Oblog修改用户扩展信息不能在动易同步的问题。