现在大多数网站都有自己的论坛,基本上的就是动网和社区动力,他们都是可以使用一站式登陆.最近做了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怎么登陆的.社区动力提供的登陆语句如下:
第一条语句的第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页面.
这样就可以了,,因为水平有限和时间参促.写的不怎么好,权当抛砖引玉吧!!!!!!!!!!!!!!!!!