因為網站要加個論壇,所以就用到了Discuz!NT3.6。
可惜目前官方論壇已經關閉,只有3.6版本的有源碼,3.9的沒有源碼,不好操作,下載地址:
http://download.comsenz.com/DiscuzNT/3.6/
先說下我需要解決的場景是:
主站sosobt.com需要調用論壇BBS的用戶信息,而不是單獨再建立一套用戶信息,論壇的域名是bbs.sosobt.com,兩個不在主機的同一文件目錄下,所以需要解決跨域的問題,
特此記錄一下如何解決這方面的問題的。
下面是我的一個解決辦法,沒有采用第三方的SDK的方式。
1.將下載編譯好的論壇放在服務器上的論壇文件夾下,用bbs.域名訪問就可以了。
2.操作主站的ASP.net代碼,引入4個DLL到項目中,分別是:
using Discuz.Common; using Discuz.Config; using Discuz.Entity; using Discuz.Forum;
需要拷貝對應的DLL到網站的BIN目錄下,然后添加引用;
3.操作獲取用戶信息的一些代碼:
Discuz.Config.GeneralConfigInfo config = Discuz.Config.GeneralConfigs.GetConfig(); OnlineUserInfo oluserinfo = Discuz.Forum.OnlineUsers.UpdateInfo(config.Passwordkey, config.Onlinetimeout); userid = oluserinfo.Userid; if (userid == -1) Response.Redirect("http://bbs.h31bt.com/index.aspx"); username = oluserinfo.Username; UserInfo us = Users.GetUserInfo(userid); userscore = Users.GetUserExtCredits(userid, 3);
從本地COOKIES里面讀取用戶 的資料信息,如果查找不到,userid返回-1,直接中轉到論壇讓用戶登錄。
4.更新用戶的積分信息,比較用戶編輯了一項內容,需要獎勵用戶一些積分什么的,需要操作積分信息:
UserInfo us = Users.GetUserInfo(userid); float uss = Users.GetUserExtCredits(userid, 3); Users.UpdateUserExtCredits(userid, 3, 1);//操作論壇的第三項積分,增加積分為1
通過UserInfo用戶信息類可以操作用戶的積分、等級等信息。
5.上面的代碼實現還需要設置一些內容才能夠保證跨域名的COOKIES的成功;
設置一下config\general.config 將 <CookieDomain/>改為<CookieDomain>domainname.XXX</CookieDomain>
6.拷貝論壇下面的config文件夾,DNT.config文件到主站的目錄文件夾下;
7.由於下載源代碼使用VS2010編譯的成.net4.0框架的程序,導致管理后台如果有HTML語句的時候會報不安全,直接失敗,需要修改的地方:
論壇下面的web.config中強制requestValidationMode="2.0"
<httpRuntime requestValidationMode="2.0" maxRequestLength="2097151" executionTimeout="3600"/>
總結:
1.目前主站已經可以獲取到用戶積分信息,操作相關的用戶類,實現用戶登錄和注冊是沒有問題的;
2.由於3.9的原代碼沒有,所以里面的QQ整合登錄代碼沒有辦法使用,很是可惜;
遇到的問題:
1.由於服務器在美國,時差相差13個小時,發現用戶注冊后,主站獲取用戶信息總是不成功,返回一1,但過了13個小時后,此用戶信息的獲取就可以了。
需要分析源代碼是否存在時間差的問題;
2.如果以后論壇架設到另外一台服務器上,需要考慮如何來調用的問題了,如果數據庫主站不能訪問的話,那就需要考慮其它方法了。
希望大家有此方面經驗的話,在此一起討論交流下,謝謝。