近期,长江VS长征做一个项目,需要整合自己程序与动网论坛,做到会员一站式登录。从网上找到一些方法,但没有做成功。现在长江VS长征先介绍自己的方法,然后,再将网上其他整合动网论坛8.2版之Cookies方法转载于后。
整合动网论坛8.2版之Cookies方法及难度介绍
要很好的对动网进行整合,就必须能够在全站读得Cookies的值,要读到它首先必须搞懂它 的Cookies设置方式,动网在每次用户登录时都会更新数据库dv_setup里字段Forum_CookiesPath的值,这个值的取得的算法在 login.asp里有,它是一个相对路径,然后获取此站点路径下的相应的Cookies,如username,userclass,因此,你只有论坛的 目录下的代码才能读取客户端论坛的Cookies,如果要在其它的地方读取,怎么办呢?
下面是动网Login.asp 里关于Cookies 的设置算法:
- '判断更新cookies目录
- Dim cookies_path_s,cookies_path_d,cookies_path
- cookies_path_s=split(Request.ServerVariables("PATH_INFO"),"/")
- cookies_path_d=ubound(cookies_path_s)
- cookies_path="/"
- For i=1 to cookies_path_d-1
- If not (cookies_path_s(i)="upload" or cookies_path_s(i)="admin") Then cookies_path=cookies_path&cookies_path_s(i)&"/"
- Next
- If dvbbs.cookiepath<>cookies_path Then
- cookies_path=replace(cookies_path,"'","")
- Dvbbs.execute("update dv_setup set Forum_Cookiespath='"&cookies_path&"'")
- Dim setupData
- Dvbbs.CacheData(26,0)=cookies_path
- Dvbbs.Name="setup"
- Dvbbs.value=Dvbbs.CacheData
- End If
实现动网cookies全站通用并且退出也是全站通用的三个步骤:
必须修改三个文件:
①打开inc/Dv_ClsMain.asp
寻找 Response.Cookies(Forum_sn).path=cookiepath
应该共有1个
替换为:
Response.Cookies(Forum_sn).path="/"
② 打开login.asp
寻找 Response.Cookies(Dvbbs.Forum_sn).path=Dvbbs.cookiepath
应该共有3个,其中一个是:Response.Cookies(Dvbbs.Forum_sn).path = Dvbbs.cookiepath(等号两旁有空格)
替换为:
Response.Cookies(Dvbbs.Forum_sn).path="/"
③ 打开logout.asp
寻找 Response.Cookies(Dvbbs.Forum_sn).path=Dvbbs.cookiepath 第26行
应该只有一个
替换为:
Response.Cookies(Dvbbs.Forum_sn).path="/"
上面这几步长江VS长征按照做了,但底下的几步没有实验成功,也许还是没有理解其中道理的原因。
现在长江VS长征将自己的方法表述如下:
因为动网用的是gb2312编码,而我的程序用的是utf-8编码。所以我整合的过程如下:
1.首先,将conn.asp中除以下部分的其他程序,放于我的程序中。
- <%@ LANGUAGE = "VBScript" CodePage = "936"%>
- Option Explicit
- session.codepage=936
- Response.Buffer = True
- Response.Charset = "GB2312"
2. 其次,将程序login.asp中的如下如下函数完整地放入我的程序。
- Rem 判断用户登录
- Function ChkUserLogin(username,password,mobile,usercookies,ctype)
- 。。。
- end function
3.在论坛中,去除了验证码。并且在我的提交页面中,只留下用户名和密码输入。
4.我的核心如下:
- dim BBSUserID
- if request("f_action")="bbslogin" then
- username=request("username")
- if request("password")="" or username="" then p_frm_message_id=1
- if p_frm_message_id=0 then
- sql = "select userpassword,truepassword from [Dv_User] where username='"&username&"'"
- set rs_tmp = Dvbbs.Execute(sql)
- If rs_tmp.eof and rs_tmp.bof Then
- p_frm_message_id=2 '用户名不存在
- End If
- rs_tmp.close
- end if
- if p_frm_message_id=0 then
- password=md5(trim(request("password")),16)
- mobile=trim(Dvbbs.CheckStr(request("passport")))
- usercookies=request("CookieDate")
- if ChkUserLogin(username,password,mobile,usercookies,1)=false then
- BBSLoginFlag=-1 '用户名或密码错等登录失败
- else
- BBSLoginFlag=1
- end if
- end if
- end if
参考资料:http://www.pczpg.com/cmsjc/dw/20090808/13004.html