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