炫客软件工作室
首页 公司 资讯 产品 支持 网站建设 案例 代理 SEO优化

热线:13628442993 | 联系方式

  当前位置: >> 首页 >> 解决方案

DXBBSv8.1论坛的整合方案

作者:spkl 发表时间:2010-4-9 20:16:46 阅读:
DXBBS v8.1的整合方案
    最近一位客户要求应用ASP.NET建立一个学校网站,要求增加BBS论坛系统,实现前台网站登录后,同时登录BBS论坛系统,经过考察,网上现有的BBS系统,多数使用MSSQL数据库,对于小型应用来说,MSSql过于繁琐,备份和维护转移都不是很方便,加之MSSQL占用一定的数据库空间,费用自然会增加,为了保持良好的移植性,选定了DXBBS论坛,采用Access数据库,但是系统没有开源。

    功能上与其他论坛大同小异,因为官方论坛也有不少关于整合的问题帖子,但查看多时,发现DXBBS开发者还真是无利不起早,N多人问整合方法,管理员一律说需要他们提供技术支持,言外之意就是腰交钱才给解决问题。。。难不成他们提供额外的整合程序??

      后来又发现一个帖子,管理员说有2中方法可以实现整合,一种是:做程序员的人一看就知道了,另外一种:还是买他们的技术支持,我比较恼火了。。。。我做了N年程序,没碰到过这样的。。。。
     不过,他的回答说明可以从程序本身来修改,但是没有提供源码,没办法,拿反编译工具 Reflector 看看吧,其中在 DXBBS.Business.Forum  下,提供了 CheckCookies  CheckUser  CheckLogin 等方法,跟踪函数,看到如下代码:
 
public static void CheckCookies()
{
    if (Sessions.UserID == 0)
    {
        HttpCookie cookie = HttpContext.Current.Request.Cookies["DXBBS"];
        if (cookie != null)
        {
            bool flag = true;
            if (((cookie["UserName"] != null) && (cookie["UserPass"] != null)) && ((cookie["Key"] != null) && (cookie["IsHide"] != null)))
            {
                string userName = Filter.Decode(cookie["UserName"]);
                string password = Filter.Decode(cookie["UserPass"]);
                string str3 = Filter.Decode(cookie["Key"]);
                bool flag2 = Convert.ToBoolean(cookie["IsHide"]);
                if (((userName != string.Empty) && (password != string.Empty)) && (str3 == Clients.CookiesKey))
                {
                    UserInfo info = new UserInfo();
                    using (DataProvider provider = new DataProvider())
                    {
                        info = CheckUser(userName, password, false, provider);
                    }
                    if (info.ID != 0)
                    {
                        flag = false;
                        LevelInfo info2 = ReadLevelCacheInfo(info.LevelID);
                        Sessions.IsHide = flag2;
                        Sessions.UserID = info.ID;
                        Sessions.UserName = info.UserName;
                        Sessions.LevelID = info.LevelID;
                        Sessions.LevelName = info2.LevelName;
                        Sessions.LevelType = (LevelType) info.LevelType;
                        Sessions.TeamID = info.TeamID;
                        Sessions.Photo = info.Photo;
                        Sessions.Topic = info.Topic;
                        Sessions.Reply = info.Reply;
                        Sessions.Coin = info.Coin;
                        Sessions.Point = info.Point;
                        Sessions.UploadNum = info.UploadNum;
                        Sessions.UploadTime = info.UploadTime;
                        Sessions.RegTime = info.RegTime;
                    }
                }
            }
            if (flag)
            {
                cookie.Expires = Servers.DateTime.AddYears(-300);
                HttpContext.Current.Response.Cookies.Add(cookie);
            }
        }
    }
}

 

 

恩,这就是通过 Cookies 判断用户登录,接着往下看

public static void CheckLogin()
{
    CheckCookies();
    if (Sessions.UserID == 0)
    {
        Informations.Deal(InformationType.Simple, LanguageKey.NotLogined, Requests.RawUrl);
    }
}

 
 
 
很明显,这是判断登录,检查Cookies,通过后,还有 Session.userid 关键的一步判断

 

跟踪 Session.userid 得到 HttpContext.Current.Session["Dxbbs_User_ID"]
 
恩,很明显,只需要再给 HttpContext.Current.Session["Dxbbs_User_ID"]  赋个值就好了,即用户的 ID
 
到此很明白了,需要给 Cookies["DXBBS"]["UserName"] ,Cookies["DXBBS"]["UserPass"],Cookies["DXBBS"]["Key"],Cookies["DXBBS"]["IsHide"],Session["Dxbbs_User_ID"],Session["Dxbbs_User_Name"]  分别赋值
 
有人问了,为什么多了一个Session["Dxbbs_User_Name"] 
因为不给它赋值,页面不会显示用户名称,呵呵
 
另外需要注意的是:论坛作者对Cookies进行了加密,加密方法有以下几个方法构成:
DXBBS.Components.Filter.Encode()  ---> 对字符串进行加密
DXBBS.Components.Filter.Decode() ---->对字符串进行解密
 
好,到这里,我们知道需要用 Encode加密 【Cookies.UserName 和UserPass 的MD5 16位加密】,isHide为固定值“false”意思是不隐身登录,至于Cookies.key这个,直接用DXBBS.Components.Clients.CookiesKey 给它赋值
 
最后Session["Dxbbs_User_ID"],Session["Dxbbs_User_Name"]  直接读取数据库就可以了
 
给出最后的代码:
 
//用户名
string UserName=txtAccount.Text.Trim();
//密码
string UserPass=txtPWD.Text.Trim();
//加密用户
HttpContext.Current.Response.Cookies["DXBBS"]["UserName"] = DXBBS.Components.Filter.Encode(UserName);
// 首先对密码进行MD5 的16为加密
UserPass = new General.Encryption().MD5(UserPass).Substring(8, 16);
//然后再加密一次密码
HttpContext.Current.Response.Cookies["DXBBS"]["UserPass"] = DXBBS.Components.Filter.Encode(UserPass);
//获取和加密key
string Ckey = DXBBS.Components.Clients.CookiesKey;
HttpContext.Current.Response.Cookies["DXBBS"]["Key"] = DXBBS.Components.Filter.Encode(Ckey);
//直接赋值IsHide
HttpContext.Current.Response.Cookies["DXBBS"]["IsHide"] = "false";
//连接数据库读取数据,为Dxbbs_User_ID 和 Dxbbs_User_Name 赋值
OleDbConnection odbcon = new OleDbConnection();
odbcon.ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0; Data Source=D:\bbs\data\Dxbbs8.aspx;";
odbcon.Open();
DataSet DSS = new DataSet();
string sqlstrr = "select * from DX_Forum_User where [username]='" + UserName + "'";
OleDbDataAdapter DAA = new OleDbDataAdapter(sqlstrr, odbcon);
DAA.Fill(DSS);
int suerid = 0;
int.TryParse(DSS.Tables[0].Rows[0]["ID"].ToString(), out suerid);
if (suerid > 0)
{
Session["Dxbbs_User_ID"] = suerid;
Session["Dxbbs_User_Name"] = UserName;
}
odbcon.Close();
odbcon.Dispose();

相关网页
炫客资源采集
即日起,建站客户,建站可享受 赠送500M三线高速空间,COM域名,企业OA,更有众多好礼相送!
分销商高级应用专区 安装、服务器设置、网站主题安装、内容添加的整体流程演示与学习
用户管理应用专区 网站的内容添加、设置等初级用户操作流程的演示与学习
主题设计师专区 主题模板设计、变量块应用、主题调试发布及销售管理流程的演示与学习
炫客软件
服务热线:13628442993    QQ:61677931
重庆炫客软件工作室 2009(C) 版权所有 鲁ICP备09058210号 重庆做网站,重庆企业建站,重庆网站建设,重庆建站
在线客服
网站新闻地图