网站和论坛整合时需要注意的地方

本文介绍如何实现网站与Discuz论坛的数据整合,包括会员信息同步、登录登出流程及注册系统的统一。通过详细步骤指导如何修改代码及模板文件以达到无缝整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网站和Discuz的整合

 

1、通过导入程序,将网站会员表导入到论坛会员表中

 

  a) 读出网站会员表中UserName, Password, Email字段的全部数据

  b) 将已经加过密的password字段再加上论坛的加密方法。

               string  newPass = Discuz.Common.Utils.MD5(password) ;

  c)  将改好的数据更新到论坛表中,完成数据的整合。

 

2、论坛登录类

 

using Discuz.Common;
using Discuz.Forum;
using Discuz.Config;
using Discuz.Entity;
using Discuz.Toolkit;


public class DNT
{
        /// <summary>
        /// 论坛登录
        /// </summary>
        public static void Login(string username, string password, bool isMd5)
        {
            //是否需要论坛MD5加密             
            string forumMd5Pwd = "";
            if (!isMd5)
            {
                forumMd5Pwd = Discuz.Common.Utils.MD5(password); 
            }
            else
            {
                forumMd5Pwd = password;
            }
                       

            //论坛登录
            Discuz.Config.GeneralConfigInfo cfg= Discuz.Config.GeneralConfigs.GetConfig();
            Discuz.Entity.OnlineUserInfo oluserinfo = Discuz.Forum.OnlineUsers.UpdateInfo(cfg.Passwordkey, cfg.Onlinetimeout);
            int olid = oluserinfo.Olid;

            int uid = Discuz.Forum.Users.CheckPassword(username,  forumMd5Pwd ,  isMd5);
            Discuz.Forum.ForumUtils.WriteCookie("userid", uid.ToString());
           
            if (uid != -1)
            {
                ShortUserInfo forumUser = Discuz.Forum.Users.GetShortUserInfo(uid);
               
                //删除之前的错误登录信息
                Discuz.Forum.LoginLogs.DeleteLoginLog(DNTRequest.GetIP());           
                //根据积分公式刷新用户总积分
                Discuz.Forum.UserCredits.UpdateUserCredits(uid);           
                //写入Discuz登陆后要用的cookie值
                Discuz.Forum.ForumUtils.WriteUserCookie(uid, Utils.StrToInt(DNTRequest.GetString("expires"), -1), cfg.Passwordkey, DNTRequest.GetInt("templateid", 0), DNTRequest.GetInt("loginmode", -1));   
                //更新用户最后动作,如不需要可不执行
                Discuz.Forum.OnlineUsers.UpdateAction(olid, UserAction.Login.ActionID, 0, cfg.Onlinetimeout);               
                //更新该用户最后访问时间
                Discuz.Forum.Users.UpdateUserCreditsAndVisit(uid, DNTRequest.GetIP());
            }
        }
       
        /// <summary>
        /// 论坛登出
        /// </summary>
        public static void Logout()
        {
            string sUid = Discuz.Forum.ForumUtils.GetCookie("userid");
            if (!String.IsNullOrEmpty(sUid))
            {
                int uid = Convert.ToInt32(sUid);

                Discuz.Config.GeneralConfigInfo _cfg = Discuz.Config.GeneralConfigs.GetConfig();
                Discuz.Entity.OnlineUserInfo oluserinfo = Discuz.Forum.OnlineUsers.UpdateInfo(_cfg.Passwordkey, _cfg.Onlinetimeout);
                int olid = oluserinfo.Olid;

                Discuz.Forum.OnlineUsers.UpdateOnlineTime(_cfg.Oltimespan, uid);
                Discuz.Forum.OnlineUsers.DeleteRows(olid);
                ForumUtils.ClearUserCookie();
                ForumUtils.WriteCookie("userid", "");
            }
        }
       
        
        /// <summary>
        /// 论坛会员注册
        /// </summary> 
        public static int Register(string username, string password, string email)
        {
            string forumMd5Pwd = Discuz.Common.Utils.MD5(password);
           
            string apikey = System.Configuration.ConfigurationManager.AppSettings["DNT_APIKey"].ToString();
            string secret = System.Configuration.ConfigurationManager.AppSettings["DNT_Secert"].ToString();
            string forumUrl = System.Configuration.ConfigurationManager.AppSettings["DNT_Url"].ToString();
            DiscuzSession ds = new DiscuzSession(apikey, secret, forumUrl);

            int uid = ds.Register(username, forumMd5Pwd, email,  true);            
            return uid;
        }

 

        /// <summary>
        /// 修改密码
        /// </summary>
        public static bool ChangePassword(int uid, string password)
        {
             return Discuz.Forum.Users.UpdateUserPassword(uid, password , true);
        }

 

}


 ----------------- 网站文件修改 ----------------------

 

3、在网站登录时,网站登录成功后,再加上论坛的登录

 

using Discuz.Common;
using Discuz.Forum;
using Discuz.Config;
using Discuz.Entity;
using Discuz.Data;

 

public   bool   Login(string userName,  string password)

{

              

               //网站登录时对password进行MD5加密  

               string webMd5Pwd = UserLoginM.HashCryptString(password+ "abcd#$%^xyz&$123", "MD5");   

 

               ......   ......    //网站登录过程略

                

                //网站登录成功后取出UserId的值,并设置登录状态Session值

                HttpContext.Current.Session["UserId"] = dt.Rows[0]["UserId"].ToString(); 
                HttpContext.Current.Session["UserName"] = userName;

         
                //论坛登录                 
                DNT.Login(userName,  webMd5Pwd ,  true);


}

 

 

 

4、在网站登出时,加上论坛的登出。

 

public volid LoginOut()

{

       Session.Abandon();

 

       DNT.Logout();               

 

 

5、整合网站会员注册系统与论坛统一,网站注册成功后,加入用户数据到论坛。

 

public void Regist()

{

        ... 网站注册成功...

       

        //注册论坛用户

        DNT.Register(userNmae, password, email);  

}

 

 

 

--------------  论坛文件修改 ------------

 

 

6、在_login.htm登录控件模版中添加登录转向的代码,确保论坛和网站的状态一致

 

 <%csharp%>

if(Request["api_key"]==null&&Request.Form["username"]!="admin")
{
     Response.Redirect("/member/userlogin.aspx");
}    
<%/csharp%>

 

 

并在login.htm论坛登录模版中添加代码:

 

<%csharp%>
if(Request.QueryString["sys"]==null)
{
    Response.Redirect("/member/userlogin.aspx");
}
<%/csharp%>

 

将admin和导入用户的登录口分开,论坛高级管理员登陆时打入:

/fourm/login.aspx?sys=1&reurl=/forum/login.aspx 进行管理登录

也可以在网站的某个地方加一个管理员连接,连接地址为:/forum/login.aspx?sys=1&reurl=/forum/index.aspx

 

 还要修改本页的“会员注册”连接:

<a href="{rooturl}register.aspx?sys=1&reurl=/forum/index.aspx" >立即注册</a>

 

另外,还要改下登录错误时的连接 _errmsgbox.htm模版

<a href="forumindex.aspx">论坛首页</a>
<%if {usergroupid}==7%>
     &nbsp; &nbsp;|&nbsp; &nbsp;

    <a href="/forum/login.aspx?sys=1&reurl=/forum/login.aspx">登录</a>&nbsp; &nbsp;|&nbsp; &nbsp;

    <a href="/forum/register.aspx?sys=1&reurl=/forum/login.aspx">注册</a>
<%/if%>

 

 

7、在logout.htm论坛登出模版中添加以下代码

 

<%csharp%>

Session.Abandon();

DNT.Logout();

Response.Redirect("/forum/forumindex.aspx");
<%/csharp%>

 

 

 

8、在register.htm会员注册模版中添加:

 

<%csharp%>

//会员注册只对公司内部管理人员开放
if (Request.QueryString["sys"] == null)

{

      Response.Redirect("/member/join.html")
}
<%/csharp%>

 

 

 

9、在usercpnewpassword.htm修改密码模版中添加:

 

<%csharp%>
string sUid = Discuz.Forum.ForumUtils.GetCookie("userid");
if (!String.IsNullOrEmpty(sUid))
{
    //根据UID获取用户的adminid
    int uid = int.Parse(sUid);
    Discuz.Entity.UserInfo uInfo = Discuz.Forum.Users.GetUserInfo(uid);
    int adminId = uInfo.Adminid;
   

    //不是管理员,转入网站后台修改密码,论坛的密码修改只对管理员开放
    if(adminId <1)
    {
        Response.Redirect("/Member/Company_PassWord.aspx");
    }
}
else
{
    System.Web.HttpContext.Current.Session.Abandon();
    HRb2b_Web.DNT.Logout();
    Response.Redirect("/forum/forumindex.aspx");
}
<%/csharp%>

 

 另外在修改密码的网站后台文件中,要同时修改论坛用户的密码。

 

DNT.ChangePassword(uid, newMD5Password);

 

 

---------------------- 

另外在修改模版时,要注意一个小细节:

在Discuz模版文件中 <%if {userid}==-1%>  和 <%if {userid}==  -1%> 是不一样的。

多一个空格就会造成编译错误!

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值