Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

如何实现从其他asp网站直接登录uch的功能,其他像我这样的菜鸟就不要凑热闹了

[复制链接]
careerhome 发表于 2009-11-6 23:27:14 | 显示全部楼层 |阅读模式
本帖最后由 careerhome 于 2009-11-7 00:26 编辑

我是想把那开心农场挂到现有的asp网站上,不用完全互通,只要以下两点:

1.asp网站注册用户的时候,在uch里面增加相应的用户

2.在现有的页面上增加一个链接,注册过并登陆了的用户一点,uch的农场就出来了

反正是系统送的金币,解决了问题就散掉30金币

补充:请问可不可以用这个思路:在asp上弄个隐藏的控件存用户名和密码,当点农场链接的时候直接传递给uch的do.php还是哪个管登陆的页面。
chigco 发表于 2009-11-6 23:33:46 | 显示全部楼层
本帖最后由 chigco 于 2009-11-6 23:42 编辑

你可以去参考官方的PassPort。

部分参考:


1.文件discuz_passport.asp

<%

'请保留以下信息以备出现问题时使用

'贡献者 huozhe3136 QQ:2666556

'=====================================================

'============仿discuz passport编码函数================

'=====================================================



function passport_encrypt(txt, key)

                dim encrypt_key, encrypt_key_ary,txt_ary

                dim ctr,tmp,i      

        Randomize

                encrypt_key=md5(Int(32000* Rnd),32)

                encrypt_key_ary=strtoary(encrypt_key)               

        txt_ary=strtoary(txt)      

        ctr = 0

        tmp = ""               

        for i = 0 to StrLength(txt)-1

                        if ctr=len(encrypt_key)  then         ctr=0  else ctr=ctr                                

            tmp = tmp & encrypt_key_Ary(ctr) &  mxor(txt_ary(i),encrypt_key_ary(ctr))

            ctr=ctr+1                                                     

        next

                passport_encrypt=strAnsi2Unicode(base64Encode(passport_key(tmp, key)))               

end function





'=====================================================

'============仿discuz passport解码函数================

'=====================================================

function passport_decrypt(txt, key)

                Dim txt_ary,tmp,i               

                txt = passport_key(base64Decode(strUnicode2Ansi(txt)), key)

                txt_ary = AnsiToAry(txt)

        ' 变量初始化

                tmp = ""

        for i = 0 To lenb(txt)-1

                  tmp = tmp & mxor(txt_ary(i),txt_ary(i+1))

                  i=i+1

                next

                passport_decrypt = strAnsi2Unicode(tmp)

end function  



'=====================================================

'==========仿discuz Passport 密匙处理函数=============

'=====================================================

function passport_key(ansitxt, encrypt_key)

                dim encrypt_key_tmp,encrypt_key_ary,txt_ary

                dim ctr,tmp,i

                encrypt_key_tmp = md5(encrypt_key,32)               

        encrypt_key_ary=StrToAry(encrypt_key_tmp)               

                txt_ary=AnsiToAry(ansitxt)                 

                ctr = 0

        tmp = ""                  

        for i=0 to lenb(ansitxt)-1                        

                    if ctr=len(encrypt_key_tmp) then ctr=0 else ctr=ctr

            tmp= tmp & mxor(txt_ary(i),encrypt_key_ary(ctr))

            ctr=ctr+1

        next

                passport_key=tmp               

end function



'=====================================================

'=================将字符串转换为Ansi数组==============

'=====================================================

function StrToAry(str)

   dim ary(),length,tmpstr,i

   tmpstr=strUnicode2Ansi(str)

   length=lenb(tmpstr)   

   redim ary(length)   

   for i=0 to length-1                                    

                ary(i)=midb(tmpstr,i+1,1)               

   next  

   StrToAry=ary

end function



'=====================================================

'=================将Ansi字符串转换为Ansi数组==========

'=====================================================

function AnsiToAry(str)

   dim ary(),length,i

   length=lenb(str)   

   redim ary(length)   

   for i=0 to length-1                                    

                ary(i)=midb(str,i+1,1)               

   next  

   AnsiToAry=ary

end function





'=====================================================

'=================异或操作============================

'=====================================================

function mxor(chrb1,chrb2)

        if chrb1<>"" and chrb2 <>"" then

        mxor=chrb(ascb(chrb1) xor ascb(chrb2))

        end if        

end function





Function StrLength(str)

        ON ERROR RESUME NEXT

        Dim WINNT_CHINESE

        WINNT_CHINESE    = (len("中国")=2)

        If WINNT_CHINESE Then

                Dim l,t,c

                Dim i

                l=len(str)

                t=l

                For i=1 To l

                        c=asc(mid(str,i,1))

                        If c<0 Then c=c+65536

                        If c>255 Then

                                t=t+1

                        End If

                Next

                strLength=t

        Else

                strLength=len(str)

        End If

        If err.number<>0 Then err.clear

End Function



%>

2.文件 login.asp

<!--#include file="md5.asp"-->

<!--#include file="base64.asp"-->

<!--#include file="discuz_passport.asp"-->

<%

'asp的整合方法已更新,,中文注册乱码问题已解决

'================================================================

'=====================用法示例==疑问加我QQ:2666556===============

'================================================================

dim PassportKey,YourAspWeb_Url,DiscuzBbs_Url

PassportKey="1234567890"  '这里换成你discuz论坛通行证设置的passportkey

YourAspWeb_Url="http://localhost/test2/login.asp"  '这里换成你的主页绝对地址或相对地址

DiscuzBbs_Url="http://localhost:8080/discuz/"          '这里换成你的discuz论坛绝对地址或相对地址



select case request.QueryString("act")

        case "login"   call login()

        case "logout"  call logout()

end select



if request.Cookies("username")<>"" then

        dim str

        str=request.Cookies("username") & " 你好 你已登陆成功" &_

    " <a href=""t3.asp?act=logout"">点击这里退出登陆</a>" &_

    " <a href="""& DiscuzBbs_Url & """>点击这里访问论坛</a><br>"

    response.Write(str)

end if



function logout()

        dim auth,forward,verify

        auth=request.Cookies("auth")        

        response.Cookies("username")=""

        response.Cookies("auth")=""        

        forward=request.QueryString("forward")

        if forward="" then forward=YourAspWeb_Url                                          

        verify = md5("logout"& auth & forward & PassportKey ,32)

        auth=server.URLEncode(auth)

        forward=server.URLEncode(forward)

        response.Redirect(DiscuzBbs_Url & "api/passport.php?action=logout&auth=" & auth & "&forward=" & forward & "&verify=" & verify)

end function







function login()

        dim auth,forward,verify,member_info

        '需根据实际情况修改,这里只作最简单的验证

        if request.Form("username")="admin" and request.Form("password")="123456" then

                '设置自己的cookie 或 session

                response.Cookies("username")=request.Form("username")

               

                '========================================================

                '===============passport 整合开始========================

                '========================================================

                '假设从用户数据库里取出email 为abc@hotmail.com

                member_info="time="  & datediff("s","1970-1-1 00:00:00",now) &_

                                                        "&username=" & request.Form("username") &_

                                                        "&password=" & md5(request.Form("password"),32) &_

                                                        "&email="    & "abc@hotmail.com"  

                auth = passport_encrypt(member_info , PassportKey)               

                response.Cookies("auth")=auth

                forward=request.form("forward")

                if forward="" then forward=YourAspWeb_Url        

                verify = md5("login" & auth & forward & PassportKey,32)

                auth=server.URLEncode(auth)

                forward=server.URLEncode(forward)        

                response.Redirect(DiscuzBbs_Url & "api/passport.php?action=login&auth=" & auth & "&forward=" & forward & "&verify=" & verify)                        

                '========================================================

                '===============passport 整合结束========================

                '========================================================

                                       

        else

                        response.Write("登陆失败<br>")

        end if

end function



%>

<form name="form1" method="post" action="login.asp?act=login">

  用户名:

  <input type="text" name="username">

  <br>

  密 码:

  <input type="password" name="password">

  <br>

  <input type="hidden" name="forward" value="<%=request.QueryString("forward")%>">    

  <input type="submit" name="Submit" value=" 登 陆 ">

</form>
回复

使用道具 举报

scckfzx 发表于 2009-11-6 23:33:54 | 显示全部楼层
本帖最后由 scckfzx 于 2009-11-7 00:13 编辑

从理论上说任何一种WEB语言都可以与UC通信,实现同步注册,登陆,退出,
在UC开发板块已经有ASP整合的代码了
回复

使用道具 举报

chigco 发表于 2009-11-6 23:34:27 | 显示全部楼层
注册,我可以实现添加。(完全自己写法,不过是php的)
但是。DZ的session加密太BT,还在搞中。
回复

使用道具 举报

 楼主| careerhome 发表于 2009-11-6 23:54:07 | 显示全部楼层
2# chigco


    谢谢您的资料,虽然这可能需要懂asp的同时也懂php,但是我非要这么做不可,正在研究中。
回复

使用道具 举报

 楼主| careerhome 发表于 2009-11-6 23:56:13 | 显示全部楼层
注册,我可以实现添加。(完全自己写法,不过是php的)
但是。DZ的session加密太BT,还在搞中。
chigco 发表于 2009-11-6 23:34



    事实上我并不是那么想完全同步,只要能在asp上注册用户,并且在asp上不需要二次输入密码能登陆农场就好了
回复

使用道具 举报

ayunlai 发表于 2009-11-7 05:12:00 | 显示全部楼层
how about UCenter 整合 asp? help
回复

使用道具 举报

MayLeo 发表于 2009-11-7 23:58:35 | 显示全部楼层
哪要那么复杂. 最简单的就是在uchome里写个ajax 通过url来传递就可以了把用户名和密码传给ajax, ajax调用uchome的登录函数,返回1或者0就可以了.
回复

使用道具 举报

MayLeo 发表于 2009-11-8 00:01:18 | 显示全部楼层
不要什么事都想到整合, 那只会把简单的事情做复杂.这种功能通常只要不到50行代码就能搞定.UCHome内置的函数很丰富的.
回复

使用道具 举报

 楼主| careerhome 发表于 2009-11-9 05:51:44 | 显示全部楼层
会者不难,难者不会
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-19 14:43 , Processed in 0.031389 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表