由於網站要加個論壇,因此就用到了Discuz!NT3.6。web
惋惜目前官方論壇已經關閉,只有3.6版本的有源碼,3.9的沒有源碼,很差操做,下載地址:數據庫
http://download.comsenz.com/DiscuzNT/3.6/跨域
先說下我須要解決的場景是:安全
主站sosobt.com須要調用論壇BBS的用戶信息,而不是單獨再創建一套用戶信息,論壇的域名是bbs.sosobt.com,兩個不在主機的同一文件目錄下,因此須要解決跨域的問題,服務器
特此記錄一下如何解決這方面的問題的。框架
下面是個人一個解決辦法,沒有采用第三方的SDK的方式。dom
1.將下載編譯好的論壇放在服務器上的論壇文件夾下,用bbs.域名訪問就能夠了。網站
2.操做主站的ASP.net代碼,引入4個DLL到項目中,分別是:spa
using Discuz.Common; using Discuz.Config; using Discuz.Entity; using Discuz.Forum;
須要拷貝對應的DLL到網站的BIN目錄下,而後添加引用;.net
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.若是之後論壇架設到另一臺服務器上,須要考慮如何來調用的問題了,若是數據庫主站不能訪問的話,那就須要考慮其它方法了。
但願你們有此方面經驗的話,在此一塊兒討論交流下,謝謝。