zoukankan      html  css  js  c++  java
  • Discuz!NT3.6与网站整合(操作用户信息)解决方案

    因为网站要加个论坛,所以就用到了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的成功;

    设置一下configgeneral.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.如果以后论坛架设到另外一台服务器上,需要考虑如何来调用的问题了,如果数据库主站不能访问的话,那就需要考虑其它方法了。

    希望大家有此方面经验的话,在此一起讨论交流下,谢谢。

  • 相关阅读:
    反射创建对象
    DevExpress 日期输入框
    SsdlToSql10.tt文件内容
    ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
    DevExpress XtraCharts 图表导出PDF/XLS/JPEG
    Java中堆内存和栈内存详解(转)
    批量合并word文档
    java内部类总结(转)
    Java 之工厂方法和抽象工厂模式(转)
    Java GC 、引用
  • 原文地址:https://www.cnblogs.com/miao31/p/3483855.html
Copyright © 2011-2022 走看看