换一个思路整合discuz nt 2.0 的登陆注册和退出

 C:/Inetpub/wwwroot/BBS2/dnt2_n2_src/Source Code/Discuz.Web/aspx/1/login.aspx
这个文件是discuz的登陆页面,但是我们如何实现在另外一个网站(另外一个虚拟目录)登陆呢?
我们自需要在我们的网站中新建一个页面如下
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<meta http-equiv=/"Content-Type/" content=/"text/html; charset=utf-8/" />
    <title>无标题页</title>
<script type="text/javascript">
        function logout()
        {
         ContaimiframeLogout.innerHTML= ContaimiframeLogout.innerHTML+ '<iframe id="ifr1"  src=" http://192.168.1.13:8000/BBS/logout.aspx?userkey=763121ce" ></iframe>';
        }    
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <input type="button" id="Button1" οnclick="logout()" value=" 退出" />
  <div id=" ContaimiframeLogout"></div>
       <iframe id="Iframe1"  src="http://192.168.1.13:8000/BBS/register2.aspx?agree=yes" style="width:600px;height:400px" ></iframe>
         <iframe id="ifr2"  src=" http://192.168.1.13:8000/BBS/login.aspx?1=1" style="width:600px;height:400px" ></iframe>
    </form>
</body>
</html>
http://192.168.1.13:8000/BBS/login2.aspx?1=1这个地址就是discuz的登陆叶面,你只要把 login.aspx 的头部和尾部去掉就好了
然后通过显示和隐藏
iframe来实现登陆,对了还有一个和重要的一点,就是 login.aspx叶面会在登陆成功后自动跳转,所以你需要把
login.aspx中的下面这句话去掉
templateBuilder.Append("" + meta.ToString() + "/r/n");
注册也是同样的道理,靠如此简单,
下面说一个更简单的如何实现退出看到上面绿色的代码
ContaimiframeLogout了吗?
自要点退出按钮的时候调用
logout()就可以了 就是调用
http://192.168.1.13:8000/BBS/logout.aspx?userkey=763121ce
靠才发现原来还有个 userkey,其实 userkey就是你密码password.Substring(4, 8).Trim();位,只要你取一下你的cookie里面密码的4-8位就行了
对了discuz nt cookie里面的密码是经过md5和des加密的家这么多米干吗呀?真是的,下面我们就把des加密去掉,下面粉红色的说明就是如何去除des加密的,去掉了des加密,你只要取一下密码的password.Substring(4, 8).Trim();位,就可以
userkey= password.Substring(4, 8).Trim(),就搞定了

分享nt discuz 结合经验,并手把手提供整合代码
虽然nt discuz 开源,IT世界网论坛也使用NT discuz 论坛,但对于一些新站长可能对整合论坛还是有一些无从下手,特别是对于那些不懂asp 又特别喜欢建站的 站长们。现在偶分享一下偶整合论坛的过程。
偶思路:在注册的时候分别同时向主站的会员表,和论坛的会员表写入数据。

方法一、(不推荐)
相关代码提供如下:
复制内容到剪贴板
代码:
sqlbbs="select * from dnt_users"
set rsbbs=server.CreateObject("adodb.recordset")
rsbbs.Open sqlbbs,conn,1,3
rsbbs.AddNew
rsbbs("username")=uid
rsbbs("nickname")=nickname
rsbbs("password")=MD5(passwd)
rsbbs("groupid")=10
rsbbs("email")=email
rsbbs("regip")=regip
rsbbs("joindate")=now()
rsbbs.Update
rsbbs.Close
set rsbbs=nothing

sqlbbs="select * from dnt_userfields"
set rsbbs=server.CreateObject("adodb.recordset")
rsbbs.Open sqlbbs,conn,1,3
rsbbs.AddNew

rsbbs.Update
rsbbs.Close
set rsbbs=nothing
加入如下代码就是注册的时候分别向会员表:dnt_users 和表dnt_userfields写入数据,
但是有个缺点:
1、要把表dnt_userfields 的ID值设置为主键 才可以,
2、新注册会员后,在论坛没有同时更新“ 欢迎新会员×××”,需加如下更新代码即可:sql="update [dnt_statistics] set totalusers=totalusers+1,lastusername='"&新会员名&"',lastuserid='"& amp;新会员id&"'"set rs=conn.execute(sql)


方法二:

思路:asp页面,注册ntdiscuz论坛,实际上要向论坛写入三个表,分别是:dnt_users dnt_userfields dnt_userfields,共用Cookies,实现注册后即自动登陆主站和论坛;注:Discuz!NT的Cookie是用DES加密的,所以要删除DES加密过程。

1、需添加如下代码:
复制内容到剪贴板
代码:
sql="insert into [dnt_users] (username,nickname,password,gender,adminid,groupid,groupexpiry,extgroupids,regip,joindate,lastip,lastvisit,lastactivity,lastpost,lastpostid,lastposttitle,posts,digestposts,oltime,pageviews,credits,extcredits1,extcredits2,extcredits3,extcredits4,extcredits5,extcredits6,extcredits7,extcredits8,avatarshowid,email,bday,sigstatus,tpp,ppp,templateid,pmsound,showemail,newsletter,invisible,newpm,newpmcount,accessmasks,onlinestate) values ('"&uid&"','"&nickname&"','"&MD5(Passwd)&"',0,0,10,0,' ','"®ip&"','"&now()&"','"®ip&"','"&now()&"','"&now()&"','"&now()&"',0,' ',0,0,0,0,0,'0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00',0,'"&email&"',' ',1,0,0,0,1,1,1,0,1,1,0,1)"
set rs=conn.execute(sql)

sql="select uid from [dnt_users] where username='"&uid&"'"
set rs=conn.execute(sql)
dntuid=rs(0)

sql="insert into [dnt_userfields] (uid,avatar,avatarwidth,avatarheight,authtime,authflag) values ('"&dntuid&"','avatars/common/0.gif',0,0,'"&now()&"',0)"
set rs=conn.execute(sql)

sql="update [dnt_statistics] set totalusers=totalusers+1,lastusername='"&uid&"',lastuserid='"&dntuid&"'"
set rs=conn.execute(sql)
2、去掉DES加密:

第一步,先去 DNT官方下载源码 http://www.discuznt.com/opensource.html 找到适合自己的版本。
我下载 SQLServer版 (.net Framework2.0)

第二步,按照dnt_sql_n2_1_src.zip里的帮助,用VS打开这个项目 第三步,打开 /Forum/ForumUtils.cs 大约350行开始

第一处:找到 public static string GetCookiePassword(string key) { return DES.Decode(GetCookie("password"), key).Trim(); }修改为 public static string GetCookiePassword(string key) { return GetCookie("password").Trim(); }

-----------------------------------------------------------------------------------------

第二处:找到 public static string GetCookiePassword(string password, string key) { return DES.Decode(password, key); }修改为 public static string GetCookiePassword(string password, string key) { return password; }

-----------------------------------------------------------------------------------------
第三处:找到 public static string SetCookiePassword(string password, string key) { // if (password.Length < 32) // { // password = password.PadRight(32); // } return DES.Encode(password, key); }修改为 public static string SetCookiePassword(string password, string key) { // if (password.Length < 32) // { // password = password.PadRight(32); // } return password; }

第四步:重写编译就可以拉特别注意:Discuz!NT官方发布的源码版(如:dnt_sql_n2_1_src.zip)和安装版(如:dnt_sql_n2_1.zip)版本不一致(可以去官方下载对比bin文件即可知道),所以不能将用源码版编译的DLL给安装版用,必须都用源码版的。

注:特别感谢“liuliu ” 此方法由liuliu提供

3、去论坛后台设置一下共用域就OK:

方法:登陆论坛------系统设置------Discuz!NT选项------其他设置------身份验证Cookie域格式:.你的域名;例:.585.com.cn)一切OK,大功告成,就是这么简单。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值