社区动力的一站式登陆

时间:2021-07-01 03:52:26

     现在大多数网站都有自己的论坛,基本上的就是动网和社区动力,他们都是可以使用一站式登陆.最近做了2个网站,都是使用社区动力作为自己的论坛,一站式登陆的.有点体会,拿出来侃侃~~~~~~~~~~~
    我采用的社区动力asp.net版本的.采用md5加密的.对于一站式登陆,数据库有2份,一份是网站的数据库,一份是论坛的数据库,所以无论是在论坛上注册还是在网站上注册,都是必须在网站的数据库和论坛的数据库插入一条记录的.登陆也一样,无论是在论坛上登陆,还是在网站上登陆都是要完成一个工作的,就是在一个地方等论,2个地方都应该已经变成登陆状态了.
      现在开始解决上面2个问题.
      我们都知道,社区动力的注册是通过调用一个存储过程dnt_createuser建立一个新用户的.bbs的用户表dnt_users的id号是自增的.我们现在的任务是我们自己来调用这个存储过程来为bbs建立新用户.网站自己会有一张注册页面的,也许风格和bbs的不同,所以你也可以再建立一张页面,来与bbs的风格相同,就是bbs的注册就在那种页面,而网站的注册就调用网站的注册页面..这个只是风格的问题,而后台的处理都是一样的,就是往网站和bbs的数据库中插入一条记录.如何设计网站的用户表,最好是考虑论坛和自己的网站双方面需要,这样比较好.当我们填完资料并且点击注册时候,触发的事件就是完成上面2个动作.
      第1步骤,最好先注册到网站的数据库中去,然后返回id号;当然也可以先注册到bbs的数据库.所以这里有2个数据库的操作,你的web.config就是2个连接数据库的字符串这里面有个约束,bbs的登陆要用到用户的id号,所以2个数据库中的用户表的id号是必须相对应的.所以后注册的那个数据库的表的id号是根据第一个表的id号来生成的.我采用的是先注册到网站的.所以要修改bbs的数据库中的表和存储过程.

主要修改如下:

我添加了一个参数@userid,就是给id号赋值的.

社区动力的一站式登陆
社区动力的一站式登陆
INSERT   INTO   [ dnt_users ] ( [ uid ] , [ username ] , [ nickname ] [ password ] [ secques ] [ 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 ] [ accessmasks ] VALUES ( @userid , @username , @nickname @password @secques @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 @accessmasks )
社区动力的一站式登陆
SELECT   SCOPE_IDENTITY ()   AS   ' userid '
社区动力的一站式登陆
SET   @uid   =   SCOPE_IDENTITY ()
社区动力的一站式登陆
社区动力的一站式登陆
IF   @@ERROR = 0
社区动力的一站式登陆    
BEGIN
社区动力的一站式登陆        
UPDATE   [ dnt_statistics ]   SET   [ totalusers ] = [ totalusers ]   +   1 , [ lastusername ] = @username , [ lastuserid ] = @userid
社区动力的一站式登陆    
END
社区动力的一站式登陆
社区动力的一站式登陆
INSERT   INTO  dnt_userfields 
社区动力的一站式登陆    (
[ uid ] , [ website ] , [ icq ] , [ qq ] , [ yahoo ] , [ msn ] , [ skype ] , [ location ] , [ customstatus ] , [ avatar ] , [ avatarwidth ] , [ avatarheight ] , [ medals ] , [ bio ] , [ signature ] , [ sightml ] , [ authstr ] )
社区动力的一站式登陆
VALUES
社区动力的一站式登陆    (
@userid , @website , @icq , @qq , @yahoo , @msn , @skype , @location , @customstatus , @avatar , @avatarwidth , @avatarheight , @medals , @bio , @signature , @sightml , @authstr )
社区动力的一站式登陆
社区动力的一站式登陆

在第一个insert语句中加入[uid]和@userid
在update语句中修改成了[lastuserid]=@userid
在最下面的insert语句修改了value下面的@userid
最后把用户表的自增去掉就好了.
比较简单.
现在前期工作都做好了,现在点击注册,调用web.config里面的网站的数据库链接字符串,把用户信息写入到数据库中去,并返回相应的id号.然后再到web.config取bbs的链接字符串,,把用户信息和刚才返回的id号传给存储过程dnt_createuser,执行存储过程.这样就完成注册了.

下面开始解决登陆问题
      登陆象上面也可以有2张页面,就是风格问题,不说了.现在主要关心后台的问题了.当输入用户名密码登陆成功后,登陆时我是先调用网站的数据库进行验证的.登陆成功后,网站的已经登陆了,那么bbs怎么登陆的.社区动力提供的登陆语句如下:
      

社区动力的一站式登陆ForumUtils.WriteUserCookie ( System.Int32 uid , System.Int32 expires , System.String passwordkey )

 

社区动力的一站式登陆OnlineUserFactory.UpdateAction( 1 , Discuz.Forum.UserAction.Login.ActionID,  0 );

第一条语句的第1个参数是用户的id号,第二个是session保存时间,第3个可以在论坛的配置文件general.config中找到.所以我们要把用户登陆后的id号传到bbs上才可以登陆,所以我们要自己新建一个项目.用来接受id号并且使用这段代码来登陆论坛.
      社区动力的一站式登陆
上面的是我的项目:
说明一下:
         login.aspx,register.aspx,usercpnewpassword.aspx是用来覆盖论坛login.aspx,register.aspx,usercpnewpassword.aspx的的,并且转向你们定义的各自登陆页面和注册页面.
         SetSession.aspx是用来接受id号执行登陆的.
         我们的网站上都是有链接到论坛的.所以我们应该在这些链接到论坛上的都应该先链接到setsession.aspx然后判断是否是已经登陆了.就是setsession.aspx作为中转页面的.
         最后我们把这个项目的dll放到bbs的bin目录下,把aspx页面放到bbs的aspx目录下子目录1的下面.覆盖bbs的aspx页面.
         这样就可以了,,因为水平有限和时间参促.写的不怎么好,权当抛砖引玉吧!!!!!!!!!!!!!!!!!