先说下我须要解决的场景是:php
主站http://h31bt.com须要调用论坛BBS的用户信息,而不是单独再创建一套用户信息,论坛的域名是bbs.h31bt.com,两个不在主机的同一文件目录下,因此须要解决跨域的问题,html
特此记录一下如何解决这方面的问题的。web
下面是个人一个解决办法,没有采用第三方的SDK的方式。数据库
1.将下载编译好的论坛放在服务器上的论坛文件夹下,用bbs.域名访问就能够了。跨域
2.操做主站的ASP.net代码,引入4个DLL到项目中,分别是:安全
using Discuz.Common;using Discuz.Config;using Discuz.Entity;using Discuz.Forum;
须要拷贝对应的DLL到网站的BIN目录下,而后添加引用;服务器
3.操做获取用户信息的一些代码:app
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.更新用户的积分信息,比较用户编辑了一项内容,须要奖励用户一些积分什么的,须要操做积分信息:dom
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.若是之后论坛架设到另一台服务器上,须要考虑如何来调用的问题了,若是数据库主站不能访问的话,那就须要考虑其它方法了。
但愿你们有此方面经验的话,在此一块儿讨论交流下,谢谢。