您的位置:首页 > 其它

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

2008-07-21 16:29 47 查看
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" onclick="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,大功告成,就是这么简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐