discuz论坛与其它网站登录注册整合

本文以discuz 7.0.0 php版本的论坛与 .net 2.0的网站注册登录整合为类.
没有采用uc_center或第三方插件.以另类的方式实现.
此方法实现的好处是不用过多了解论坛本身的实现细节,借助论坛自己的登录,注册页面来完成,我们只是获到参数post到这个页面来实现注册及登录过程,修改密码也可以用这个方式,但考虑到修改相对简单,就用直接修改数据库的方式实现.

一、论坛修改的地方

1. 论坛入口修改 
a. templates/default/header.htm 修改注册和登录入口到网站
b. forumdata/ templates/1_discuz.tpl.php   修改注册和登录的入口
2. register.php改成如下:
    <?php

/*
 [Discuz!] (C)2001-2009 Comsenz Inc.
 This is NOT a freeware, use is subject to license terms

$Id: redirect.php 16688 2008-11-14 06:41:07Z cnteacher $
*/

define('CURSCRIPT', 'viewthread');

require_once './include/common.inc.php';

if($goto == 'findpost') {

$pid = intval($pid);
 $ptid = intval($ptid);
 
 if($post = $db->fetch_first("SELECT p.tid, p.dateline, t.special FROM {$tablepre}

posts p LEFT JOIN {$tablepre}threads t USING(tid) WHERE p.pid='$pid'")) {
  $sqladd = $post['special'] ? "AND first=0" : '';
  $page = ceil($db->result_first("SELECT count(*) FROM {$tablepre}posts WHERE

tid='$post[tid]' AND dateline<='$post[dateline]' $sqladd") / $ppp);
  if(!empty($special) && $special == 'trade') {
   dheader("Location: viewthread.php?do=tradeinfo&tid=$post[tid]

&pid=$pid");
  } else {
   dheader("Location: viewthread.php?tid=$post[tid]&page=$page".

(isset($_GET['modthreadkey']) && ($modthreadkey=modthreadkey($post['tid'])) ?

"&modthreadkey=$modthreadkey": '')."#pid$pid");
  }
 } else {
         $ptid = !empty($ptid) ? intval($ptid) : 0;
  showmessage('post_check', NULL, 'HALTED');
 }
}

$tid = $forum['closed'] < 2 ? $tid : $forum['closed'];

if(empty($tid)) {
 showmessage('thread_nonexistence');
}

if(isset($fid) && empty($forum)) {
 showmessage('forum_nonexistence', NULL, 'HALTED');
}

@include DISCUZ_ROOT.'./forumdata/cache/cache_viewthread.php';

if($goto == 'lastpost') {

if($tid) {
  $query = $db->query("SELECT tid, replies, special FROM {$tablepre}threads

WHERE tid='$tid' AND displayorder>='0'");
 } else {
  $query = $db->query("SELECT tid, replies, special FROM {$tablepre}threads

WHERE fid='$fid' AND displayorder>='0' ORDER BY lastpost DESC LIMIT 1");
 }
 if(!$thread = $db->fetch_array($query)) {
  showmessage('thread_nonexistence');
 }
 $page = ceil(($thread['special'] ? $thread['replies'] : $thread['replies'] + 1) /

$ppp);
 $tid = $thread['tid'];

require_once DISCUZ_ROOT.'./viewthread.php';
 exit();

} elseif($goto == 'newpost') {

$page = max(ceil($db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE

tid='$tid' AND dateline<='$lastvisit'") / $ppp), 1);

require_once DISCUZ_ROOT.'./viewthread.php';
 exit();

} elseif($goto == 'nextnewset') {

if($fid && $tid) {
  $this_lastpost = $db->result_first("SELECT lastpost FROM {$tablepre}threads

WHERE tid='$tid' AND displayorder>='0'");
  if($next = $db->fetch_first("SELECT tid FROM {$tablepre}threads WHERE

fid='$fid' AND displayorder>='0' AND lastpost>'$this_lastpost' ORDER BY lastpost ASC LIMIT

1")) {
   $tid = $next['tid'];
   require_once DISCUZ_ROOT.'./viewthread.php';
   exit();
  } else {
   showmessage('redirect_nextnewset_nonexistence');
  }
 } else {
  showmessage('undefined_action', NULL, 'HALTED');
 }

} elseif($goto == 'nextoldset') {

if($fid && $tid) {
  $this_lastpost = $db->result_first("SELECT lastpost FROM {$tablepre}threads

WHERE tid='$tid' AND displayorder>='0'");
  if($last = $db->fetch_first("SELECT tid FROM {$tablepre}threads WHERE

fid='$fid' AND displayorder>='0' AND lastpost<'$this_lastpost' ORDER BY lastpost DESC LIMIT

1")) {
   $tid = $last['tid'];
   require_once DISCUZ_ROOT.'./viewthread.php';
   exit();
  } else {
   showmessage('redirect_nextoldset_nonexistence');
  }
 } else {
  showmessage('undefined_action', NULL, 'HALTED');
 }

} else {
 showmessage('undefined_action', NULL, 'HALTED');
}

?>
修改register.php页面,主要是去掉上面的if判断请求来路

二、网站本身修改的地方
1.登录   
   a.直接从本站登录:把用户名和密码加密后存入session, 点击导航上 论坛链接 转到bbslogin.aspx

页面
   b.如果是从论坛网站登录。直接请求BBSlogin.aspx登录论坛并打开登录页面。Window.open();

{
存入session
   string name = Common.DEncrypt.DESEncrypt.Encrypt(username.Text.Trim().ToString(),

"efdsfdedasf48545111111"); //用户名加密
                        string pass = Common.DEncrypt.DESEncrypt.Encrypt

(txtPassword.Text.Trim().ToString(), "efdsfdedasf48545111111");//密码加密
                        Session["name"] = name;
                        Session["pass"] = pass;
}

{
   //网站登录成功之后,进行论坛登录        用户是从论坛过来的
            if (ViewState["url"].ToString().IndexOf("xxx.com") != -1)
            {
                string u_name = Common.DEncrypt.DESEncrypt.Encrypt

(username.Text.Trim(), "efdsfdedasf48545111111"); //用户名加密
                string u_pass = Common.DEncrypt.DESEncrypt.Encrypt

(txtPassword.Text.Trim(), "efdsfdedasf48545111111");//密码加密
                Page.ClientScript.RegisterStartupScript(GetType(), "bbskey",

"<script>window.open('/User/BBSLogoin.aspx?n=" + u_name + "&p=" + u_pass +

"');window.location.href='/User/index.aspx'</script>", false);

}
}
{  登录
protected void Page_Load(object sender, EventArgs e)
    {
        ShowUserInfo();
    }
    public void ShowUserInfo()
    {
        string u_name = Session["name"].ToString();
        string u_pass = Session["pass"].ToString();
        Response.Redirect(SitePath + "User/BBSLogoin.aspx?n=" + u_name + "&p=" + u_pass +

"");
        Response.Redirect(SitePath + "login.aspx");
    }
}

bbslogin.aspx前台页面内容
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BBSLogoin.aspx.cs"

Inherits="User_BBSLogoin" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>正在登录论坛</title>

<script>
    function loginbbs()
    {
        var form = document.getElementById("loginform");
        form.submit();
    }
     if(document.readyState == "complete" )
     {        
        loginbbs();
     }
    </script>

</head>
<body onload="loginbbs()">
   <div style="display:none;">
    <form action="http://论坛url/logging.php?

action=login&amp;loginsubmit=yes&amp;floatlogin=yes"
    id="loginform" name="login" method="post">
    <h3 id="returnmessage">
        用户登录<%=Username %><%=Pwd %></h3>
    <input type="hidden" value="21e0ca66" name="formhash">
    <input type="hidden" value="http://论坛url/index.php" name="referer">
    <div class="loginform nolabelform">
        <div class="selectinput">
            <select selecti="0" name="loginfield" style="float: left; width: 50px; display:

none;"
                id="loginfield">
                <option value="username"></option>
            </select><a tabindex="1" onclick="loadselect_viewmenu(this, 'loginfield', 0,

'floatlayout_login');doane(event)"
                onkeyup="loadselect_key(this, event, 'loginfield', 'floatlayout_login')"

onmouseout="this.blur()"
                onmouseover="this.focus()" onblur="loadselect_keyinit(event, 2)"

onfocus="loadselect_keyinit(event, 1)"
                id="loginfield_selectinput" class="loadselect" hidefocus="true"

href="javascript:;">用户名</a><ul
                    style="display: none;" id="loginfield_selectmenu" class="newselect"

onblur="loadselect_keyinit(event, 2)"
                    onfocus="loadselect_keyinit(event, 1)">
                    <li onclick="loadselect_liset('loginfield', 0,

'loginfield','username',this.innerHTML, 0)"
                        k_value="username" k_id="loginfield" class="current">用户名</li><li

onclick="loadselect_liset('loginfield', 0, 'loginfield','uid',this.innerHTML, 1)"
                            k_value="uid" k_id="loginfield">UID</li></ul>
            <input type="text" tabindex="1" class="txt" size="36" autocomplete="off"
                name="username" id="username" value="<%=Username %>" />
        </div>
        <p class="selectinput loginpsw">
            <label for="password3">
                密 码 :</label>
            <input type="password" tabindex="1" class="txt" size="36" name="password"

id="password3" value="<%=Pwd %>">
        </p>
        <div class="selecttype">
            <select style="width: 175px; display: none;" selecti="0" id="questionid"

name="questionid"
                change="if($('questionid').value &gt; 0) {$('answer').style.display='';}

else {$('answer').style.display='none';}">
                <option value="0"></option>
            </select><a tabindex="1" onclick="loadselect_viewmenu(this, 'questionid', 0,

'floatlayout_login');doane(event)"
                onkeyup="loadselect_key(this, event, 'questionid', 'floatlayout_login')"

onmouseout="this.blur()"
                onmouseover="this.focus()" onblur="loadselect_keyinit(event, 2)"

onfocus="loadselect_keyinit(event, 1)"
                id="questionid_selectinput" class="loadselect" hidefocus="true"

href="javascript:;">安全提问</a><ul
                    style="display: none;" id="questionid_selectmenu" class="newselect"

onblur="loadselect_keyinit(event, 2)"
                    onfocus="loadselect_keyinit(event, 1)">
                    <li onclick="loadselect_liset('questionid', 0,

'questionid','0',this.innerHTML, 0)"
                        k_value="0" k_id="questionid" class="current">安全提问</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','1',this.innerHTML, 1)"
                            k_value="1" k_id="questionid">母亲的名字</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','2',this.innerHTML, 2)"
                                k_value="2" k_id="questionid">爷爷的名字</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','3',this.innerHTML, 3)"
                                    k_value="3" k_id="questionid">父亲出生的城市</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','4',this.innerHTML, 4)"
                                        k_value="4" k_id="questionid">您其中一位老师的名字

</li><li onclick="loadselect_liset('questionid', 0, 'questionid','5',this.innerHTML, 5)"
                                            k_value="5" k_id="questionid">您个人计算机的型

号</li><li onclick="loadselect_liset('questionid', 0, 'questionid','6',this.innerHTML, 6)"
                                                k_value="6" k_id="questionid">您最喜欢的餐

馆名称</li><li onclick="loadselect_liset('questionid', 0, 'questionid','7',this.innerHTML,

7)"
                                                    k_value="7" k_id="questionid">驾驶执照

的最后四位数字</li></ul>
        </div>
        <p>
            <input type="text" tabindex="1" class="txt" size="36" autocomplete="off"

style="display: none;"
                id="answer" name="answer"></p>
    </div>
    <p class="fsubmit">
        <button tabindex="1" value="true" name="loginsubmit" type="submit" class="submit">
            登录</button>
        <input type="checkbox" value="2592000" tabindex="1" id="cookietime"

name="cookietime"
            class="checkbox">
        <label for="cookietime">
            记住我的登录状态</label>
    </p>
    </form>
    </div>
    <div style="text-align:center;">
       <img src="/images/jdt.gif" />
    </div>
</body>
</html>
BBSlogin.aspx后台内容
  protected string Username;
    protected string Pwd;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request["n"] != null)
        {
            Username = Common.DEncrypt.DESEncrypt.Decrypt(Request["n"].ToString(),

"efdsfdedasf48545111111");
        }
        if (Request["p"] != null)
        {
            Pwd = Common.DEncrypt.DESEncrypt.Decrypt(Request["p"].ToString(),

"efdsfdedasf48545dfesfe");
        }    
        Page.RegisterStartupScript("key", "<script>loginbbs();</script>");
    }

2.注册的修改 (用户名密码邮箱) 传入BBSRegister.aspx 进行注册 
BBSRegister.aspx前台内容

{  注册
   string bbs_uName = Common.DEncrypt.DESEncrypt.Encrypt

(this.txtLogName.Value,"edfck8745debc778888"); //论坛用户名(加密)
                string bbs_uPass = Common.DEncrypt.DESEncrypt.Encrypt

(this.password.Value, "edfck8745debc778888"); //论坛密码
                string bbs_uEmail = this.email.Value.Trim(); //论坛邮箱
               // Page.ClientScript.RegisterStartupScript(GetType(), "mykey",

"<script>alert('注册成功!请通过邮件激活后登录至用户中心完善您的资料');window.open('" +

URLReturn + "');window.open('user/BBSRegister.aspx?

b_N="+bbs_uName+"&b_P="+bbs_uPass+"&b_E="+bbs_uEmail+"')</script>");
                Page.ClientScript.RegisterStartupScript(GetType(), "mykey", "<script>alert

('注册成功!请通过邮件激活后登录至用户中心完善您的资料');window.open

('user/BBSRegister.aspx?b_N=" + bbs_uName + "&b_P=" + bbs_uPass + "&b_E=" + bbs_uEmail +

"')</script>");

}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BBSRegister.aspx.cs"

Inherits="User_BBSRegister" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>正在同步登录论坛</title>

<script type="text/javascript">
    
    function regbbs()
    {
        var form = document.getElementById("registerform");
        form.submit();
    } 
    if(document.readyState == "complete" )
    {
        debugger;
        regbbs();
     }  
    </script>

</head>
<body onload="regbbs()">
    <div style="display:none;">
        <form action="http://论坛url/register.php?regsubmit=yes"

id="registerform"
        name="register" method="post">
        <h3 id="returnmessage4">
            注册</h3>
        <input type="hidden" value="bae784cb" name="formhash" />
        <input type="hidden" value="http://论坛url/index.php" name="referer" />
        <input type="hidden" value="register" name="handlekey" />
        <input type="hidden" value="true" name="activationauth" />
        <div class="loginform regform">
            <div>
                <span id="activation_hidden">
                    <label>
                        <em>用户名:</em><input type="text" tabindex="1" value="<%=Username

%>" maxlength="15"
                            size="25" autocomplete="off" name="username" id="username" />
                        *</label>
                    <label>
                        <em>密码:</em><input type="password" tabindex="1" id="password"

size="25" name="password"
                            value="<%=Pwd %>" />
                        *</label>
                    <label>
                        <em>确认密码:</em><input type="password" tabindex="1" value="<%=Pwd

%>" id="password2"
                            size="25" name="password2" />
                        *</label>
                    <label>
                        <em>Email:</em><input type="text" tabindex="1" id="email" size="25"

name="email"
                            value="<%=Email %>" />
                        *</label>
                </span>
            </div>
        </div>
        <p>
            <span id="reginfo_a_btn"><em>&nbsp;</em>
                <button tabindex="1" value="true" name="regsubmit" type="submit"

id="registerformsubmit">
                    提交</button>
            </span>
        </p>
        </form>
    </div>
    <div style="text-align: center;">
        <img src="/images/jdt.gif" />
    </div>
</body>
</html>
BBSRedister.aspx.cs内容
protected string Username;
    protected string Pwd;
    protected string Email;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request["b_N"] != null)
        {
            Username = Common.DEncrypt.DESEncrypt.Decrypt(Request["b_N"],

"edfck8745debc778888"); //解密用户名
        }
        if (Request["b_P"] != null)
        {
            Pwd = Common.DEncrypt.DESEncrypt.Decrypt(Request["b_P"],

"edfck8745debc778888");//解密密码
        }
        if (Request["b_E"] != null)
        {
            Email = Request["b_E"];
        }
}
3. 用户密码的修改 (直接操作数据库;注意discuz密码加密方式先用新密码a进行一次MD5加密32

位,然后用a+(“discuz_uc_members表中的salt字段的值”))在进行一次MD5加密

public void BBSPwdUpdate(string name, string pwd)
    {
        string constr =

"host=121.9.1.1;database=discuz;UserName=dbusername;password=123456";
        string res = GetRegistrerCodeByName(UserName.ToString());
        string pwd1 = Common.StrHelper.Md5(pwd, 32).ToString();
        string pwd2 = Common.StrHelper.Md5((pwd1 + res), 32).ToString();
        string sql = "update cdb_members set password ='" + pwd2 + "' where username = '" +

name + "'";
        string sql1 = "update cdb_uc_members set password ='" + pwd2 + "' where username =

'" + name + "'";
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            try
            {
                con.Open();
                MySqlCommand cmd = new MySqlCommand(sql, con);
                MySqlCommand cmd1 = new MySqlCommand(sql1, con);
                cmd.ExecuteNonQuery();
                cmd1.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }

public string GetRegistrerCodeByName(string name)
    {
        string constr =

"host=121.9.1.1;database=discuz;UserName=dbusername;password=123456";
        string sql = "select salt from cdb_uc_members where username='" + name + "'";
        string res = "";
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            try
            {
                con.Open();
                MySqlCommand com = new MySqlCommand(sql, con);
                res = com.ExecuteScalar().ToString();
            }
            catch (MySqlException ex)
            {
                throw new Exception(ex.Message);
            }
        }
        return res;
    }

三、mysql远程连接失败解决方法
   1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那

台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从“localhost”

改称“%” 
mysql -u root -pvmwaremysql>use mysql;
mysql>update user set host = ‘%’ where user = ‘root’;
mysql>select host, user from user;
2. 授权法。例如

discuz论坛与其它网站登录注册整合

本文以discuz 7.0.0 php版本的论坛与 .net 2.0的网站注册登录整合为类.
没有采用uc_center或第三方插件.以另类的方式实现.
此方法实现的好处是不用过多了解论坛本身的实现细节,借助论坛自己的登录,注册页面来完成,我们只是获到参数post到这个页面来实现注册及登录过程,修改密码也可以用这个方式,但考虑到修改相对简单,就用直接修改数据库的方式实现.

一、论坛修改的地方

1. 论坛入口修改 
a. templates/default/header.htm 修改注册和登录入口到网站
b. forumdata/ templates/1_discuz.tpl.php   修改注册和登录的入口
2. register.php改成如下:
    <?php

/*
 [Discuz!] (C)2001-2009 Comsenz Inc.
 This is NOT a freeware, use is subject to license terms

$Id: redirect.php 16688 2008-11-14 06:41:07Z cnteacher $
*/

define('CURSCRIPT', 'viewthread');

require_once './include/common.inc.php';

if($goto == 'findpost') {

$pid = intval($pid);
 $ptid = intval($ptid);
 
 if($post = $db->fetch_first("SELECT p.tid, p.dateline, t.special FROM {$tablepre}

posts p LEFT JOIN {$tablepre}threads t USING(tid) WHERE p.pid='$pid'")) {
  $sqladd = $post['special'] ? "AND first=0" : '';
  $page = ceil($db->result_first("SELECT count(*) FROM {$tablepre}posts WHERE

tid='$post[tid]' AND dateline<='$post[dateline]' $sqladd") / $ppp);
  if(!empty($special) && $special == 'trade') {
   dheader("Location: viewthread.php?do=tradeinfo&tid=$post[tid]

&pid=$pid");
  } else {
   dheader("Location: viewthread.php?tid=$post[tid]&page=$page".

(isset($_GET['modthreadkey']) && ($modthreadkey=modthreadkey($post['tid'])) ?

"&modthreadkey=$modthreadkey": '')."#pid$pid");
  }
 } else {
         $ptid = !empty($ptid) ? intval($ptid) : 0;
  showmessage('post_check', NULL, 'HALTED');
 }
}

$tid = $forum['closed'] < 2 ? $tid : $forum['closed'];

if(empty($tid)) {
 showmessage('thread_nonexistence');
}

if(isset($fid) && empty($forum)) {
 showmessage('forum_nonexistence', NULL, 'HALTED');
}

@include DISCUZ_ROOT.'./forumdata/cache/cache_viewthread.php';

if($goto == 'lastpost') {

if($tid) {
  $query = $db->query("SELECT tid, replies, special FROM {$tablepre}threads

WHERE tid='$tid' AND displayorder>='0'");
 } else {
  $query = $db->query("SELECT tid, replies, special FROM {$tablepre}threads

WHERE fid='$fid' AND displayorder>='0' ORDER BY lastpost DESC LIMIT 1");
 }
 if(!$thread = $db->fetch_array($query)) {
  showmessage('thread_nonexistence');
 }
 $page = ceil(($thread['special'] ? $thread['replies'] : $thread['replies'] + 1) /

$ppp);
 $tid = $thread['tid'];

require_once DISCUZ_ROOT.'./viewthread.php';
 exit();

} elseif($goto == 'newpost') {

$page = max(ceil($db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE

tid='$tid' AND dateline<='$lastvisit'") / $ppp), 1);

require_once DISCUZ_ROOT.'./viewthread.php';
 exit();

} elseif($goto == 'nextnewset') {

if($fid && $tid) {
  $this_lastpost = $db->result_first("SELECT lastpost FROM {$tablepre}threads

WHERE tid='$tid' AND displayorder>='0'");
  if($next = $db->fetch_first("SELECT tid FROM {$tablepre}threads WHERE

fid='$fid' AND displayorder>='0' AND lastpost>'$this_lastpost' ORDER BY lastpost ASC LIMIT

1")) {
   $tid = $next['tid'];
   require_once DISCUZ_ROOT.'./viewthread.php';
   exit();
  } else {
   showmessage('redirect_nextnewset_nonexistence');
  }
 } else {
  showmessage('undefined_action', NULL, 'HALTED');
 }

} elseif($goto == 'nextoldset') {

if($fid && $tid) {
  $this_lastpost = $db->result_first("SELECT lastpost FROM {$tablepre}threads

WHERE tid='$tid' AND displayorder>='0'");
  if($last = $db->fetch_first("SELECT tid FROM {$tablepre}threads WHERE

fid='$fid' AND displayorder>='0' AND lastpost<'$this_lastpost' ORDER BY lastpost DESC LIMIT

1")) {
   $tid = $last['tid'];
   require_once DISCUZ_ROOT.'./viewthread.php';
   exit();
  } else {
   showmessage('redirect_nextoldset_nonexistence');
  }
 } else {
  showmessage('undefined_action', NULL, 'HALTED');
 }

} else {
 showmessage('undefined_action', NULL, 'HALTED');
}

?>
修改register.php页面,主要是去掉上面的if判断请求来路

二、网站本身修改的地方
1.登录   
   a.直接从本站登录:把用户名和密码加密后存入session, 点击导航上 论坛链接 转到bbslogin.aspx

页面
   b.如果是从论坛网站登录。直接请求BBSlogin.aspx登录论坛并打开登录页面。Window.open();

{
存入session
   string name = Common.DEncrypt.DESEncrypt.Encrypt(username.Text.Trim().ToString(),

"efdsfdedasf48545111111"); //用户名加密
                        string pass = Common.DEncrypt.DESEncrypt.Encrypt

(txtPassword.Text.Trim().ToString(), "efdsfdedasf48545111111");//密码加密
                        Session["name"] = name;
                        Session["pass"] = pass;
}

{
   //网站登录成功之后,进行论坛登录        用户是从论坛过来的
            if (ViewState["url"].ToString().IndexOf("xxx.com") != -1)
            {
                string u_name = Common.DEncrypt.DESEncrypt.Encrypt

(username.Text.Trim(), "efdsfdedasf48545111111"); //用户名加密
                string u_pass = Common.DEncrypt.DESEncrypt.Encrypt

(txtPassword.Text.Trim(), "efdsfdedasf48545111111");//密码加密
                Page.ClientScript.RegisterStartupScript(GetType(), "bbskey",

"<script>window.open('/User/BBSLogoin.aspx?n=" + u_name + "&p=" + u_pass +

"');window.location.href='/User/index.aspx'</script>", false);

}
}
{  登录
protected void Page_Load(object sender, EventArgs e)
    {
        ShowUserInfo();
    }
    public void ShowUserInfo()
    {
        string u_name = Session["name"].ToString();
        string u_pass = Session["pass"].ToString();
        Response.Redirect(SitePath + "User/BBSLogoin.aspx?n=" + u_name + "&p=" + u_pass +

"");
        Response.Redirect(SitePath + "login.aspx");
    }
}

bbslogin.aspx前台页面内容
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BBSLogoin.aspx.cs"

Inherits="User_BBSLogoin" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>正在登录论坛</title>

<script>
    function loginbbs()
    {
        var form = document.getElementById("loginform");
        form.submit();
    }
     if(document.readyState == "complete" )
     {        
        loginbbs();
     }
    </script>

</head>
<body onload="loginbbs()">
   <div style="display:none;">
    <form action="http://论坛url/logging.php?

action=login&amp;loginsubmit=yes&amp;floatlogin=yes"
    id="loginform" name="login" method="post">
    <h3 id="returnmessage">
        用户登录<%=Username %><%=Pwd %></h3>
    <input type="hidden" value="21e0ca66" name="formhash">
    <input type="hidden" value="http://论坛url/index.php" name="referer">
    <div class="loginform nolabelform">
        <div class="selectinput">
            <select selecti="0" name="loginfield" style="float: left; width: 50px; display:

none;"
                id="loginfield">
                <option value="username"></option>
            </select><a tabindex="1" onclick="loadselect_viewmenu(this, 'loginfield', 0,

'floatlayout_login');doane(event)"
                onkeyup="loadselect_key(this, event, 'loginfield', 'floatlayout_login')"

onmouseout="this.blur()"
                onmouseover="this.focus()" onblur="loadselect_keyinit(event, 2)"

onfocus="loadselect_keyinit(event, 1)"
                id="loginfield_selectinput" class="loadselect" hidefocus="true"

href="javascript:;">用户名</a><ul
                    style="display: none;" id="loginfield_selectmenu" class="newselect"

onblur="loadselect_keyinit(event, 2)"
                    onfocus="loadselect_keyinit(event, 1)">
                    <li onclick="loadselect_liset('loginfield', 0,

'loginfield','username',this.innerHTML, 0)"
                        k_value="username" k_id="loginfield" class="current">用户名</li><li

onclick="loadselect_liset('loginfield', 0, 'loginfield','uid',this.innerHTML, 1)"
                            k_value="uid" k_id="loginfield">UID</li></ul>
            <input type="text" tabindex="1" class="txt" size="36" autocomplete="off"
                name="username" id="username" value="<%=Username %>" />
        </div>
        <p class="selectinput loginpsw">
            <label for="password3">
                密 码 :</label>
            <input type="password" tabindex="1" class="txt" size="36" name="password"

id="password3" value="<%=Pwd %>">
        </p>
        <div class="selecttype">
            <select style="width: 175px; display: none;" selecti="0" id="questionid"

name="questionid"
                change="if($('questionid').value &gt; 0) {$('answer').style.display='';}

else {$('answer').style.display='none';}">
                <option value="0"></option>
            </select><a tabindex="1" onclick="loadselect_viewmenu(this, 'questionid', 0,

'floatlayout_login');doane(event)"
                onkeyup="loadselect_key(this, event, 'questionid', 'floatlayout_login')"

onmouseout="this.blur()"
                onmouseover="this.focus()" onblur="loadselect_keyinit(event, 2)"

onfocus="loadselect_keyinit(event, 1)"
                id="questionid_selectinput" class="loadselect" hidefocus="true"

href="javascript:;">安全提问</a><ul
                    style="display: none;" id="questionid_selectmenu" class="newselect"

onblur="loadselect_keyinit(event, 2)"
                    onfocus="loadselect_keyinit(event, 1)">
                    <li onclick="loadselect_liset('questionid', 0,

'questionid','0',this.innerHTML, 0)"
                        k_value="0" k_id="questionid" class="current">安全提问</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','1',this.innerHTML, 1)"
                            k_value="1" k_id="questionid">母亲的名字</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','2',this.innerHTML, 2)"
                                k_value="2" k_id="questionid">爷爷的名字</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','3',this.innerHTML, 3)"
                                    k_value="3" k_id="questionid">父亲出生的城市</li><li

onclick="loadselect_liset('questionid', 0, 'questionid','4',this.innerHTML, 4)"
                                        k_value="4" k_id="questionid">您其中一位老师的名字

</li><li onclick="loadselect_liset('questionid', 0, 'questionid','5',this.innerHTML, 5)"
                                            k_value="5" k_id="questionid">您个人计算机的型

号</li><li onclick="loadselect_liset('questionid', 0, 'questionid','6',this.innerHTML, 6)"
                                                k_value="6" k_id="questionid">您最喜欢的餐

馆名称</li><li onclick="loadselect_liset('questionid', 0, 'questionid','7',this.innerHTML,

7)"
                                                    k_value="7" k_id="questionid">驾驶执照

的最后四位数字</li></ul>
        </div>
        <p>
            <input type="text" tabindex="1" class="txt" size="36" autocomplete="off"

style="display: none;"
                id="answer" name="answer"></p>
    </div>
    <p class="fsubmit">
        <button tabindex="1" value="true" name="loginsubmit" type="submit" class="submit">
            登录</button>
        <input type="checkbox" value="2592000" tabindex="1" id="cookietime"

name="cookietime"
            class="checkbox">
        <label for="cookietime">
            记住我的登录状态</label>
    </p>
    </form>
    </div>
    <div style="text-align:center;">
       <img src="/images/jdt.gif" />
    </div>
</body>
</html>
BBSlogin.aspx后台内容
  protected string Username;
    protected string Pwd;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request["n"] != null)
        {
            Username = Common.DEncrypt.DESEncrypt.Decrypt(Request["n"].ToString(),

"efdsfdedasf48545111111");
        }
        if (Request["p"] != null)
        {
            Pwd = Common.DEncrypt.DESEncrypt.Decrypt(Request["p"].ToString(),

"efdsfdedasf48545dfesfe");
        }    
        Page.RegisterStartupScript("key", "<script>loginbbs();</script>");
    }

2.注册的修改 (用户名密码邮箱) 传入BBSRegister.aspx 进行注册 
BBSRegister.aspx前台内容

{  注册
   string bbs_uName = Common.DEncrypt.DESEncrypt.Encrypt

(this.txtLogName.Value,"edfck8745debc778888"); //论坛用户名(加密)
                string bbs_uPass = Common.DEncrypt.DESEncrypt.Encrypt

(this.password.Value, "edfck8745debc778888"); //论坛密码
                string bbs_uEmail = this.email.Value.Trim(); //论坛邮箱
               // Page.ClientScript.RegisterStartupScript(GetType(), "mykey",

"<script>alert('注册成功!请通过邮件激活后登录至用户中心完善您的资料');window.open('" +

URLReturn + "');window.open('user/BBSRegister.aspx?

b_N="+bbs_uName+"&b_P="+bbs_uPass+"&b_E="+bbs_uEmail+"')</script>");
                Page.ClientScript.RegisterStartupScript(GetType(), "mykey", "<script>alert

('注册成功!请通过邮件激活后登录至用户中心完善您的资料');window.open

('user/BBSRegister.aspx?b_N=" + bbs_uName + "&b_P=" + bbs_uPass + "&b_E=" + bbs_uEmail +

"')</script>");

}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BBSRegister.aspx.cs"

Inherits="User_BBSRegister" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>正在同步登录论坛</title>

<script type="text/javascript">
    
    function regbbs()
    {
        var form = document.getElementById("registerform");
        form.submit();
    } 
    if(document.readyState == "complete" )
    {
        debugger;
        regbbs();
     }  
    </script>

</head>
<body onload="regbbs()">
    <div style="display:none;">
        <form action="http://论坛url/register.php?regsubmit=yes"

id="registerform"
        name="register" method="post">
        <h3 id="returnmessage4">
            注册</h3>
        <input type="hidden" value="bae784cb" name="formhash" />
        <input type="hidden" value="http://论坛url/index.php" name="referer" />
        <input type="hidden" value="register" name="handlekey" />
        <input type="hidden" value="true" name="activationauth" />
        <div class="loginform regform">
            <div>
                <span id="activation_hidden">
                    <label>
                        <em>用户名:</em><input type="text" tabindex="1" value="<%=Username

%>" maxlength="15"
                            size="25" autocomplete="off" name="username" id="username" />
                        *</label>
                    <label>
                        <em>密码:</em><input type="password" tabindex="1" id="password"

size="25" name="password"
                            value="<%=Pwd %>" />
                        *</label>
                    <label>
                        <em>确认密码:</em><input type="password" tabindex="1" value="<%=Pwd

%>" id="password2"
                            size="25" name="password2" />
                        *</label>
                    <label>
                        <em>Email:</em><input type="text" tabindex="1" id="email" size="25"

name="email"
                            value="<%=Email %>" />
                        *</label>
                </span>
            </div>
        </div>
        <p>
            <span id="reginfo_a_btn"><em>&nbsp;</em>
                <button tabindex="1" value="true" name="regsubmit" type="submit"

id="registerformsubmit">
                    提交</button>
            </span>
        </p>
        </form>
    </div>
    <div style="text-align: center;">
        <img src="/images/jdt.gif" />
    </div>
</body>
</html>
BBSRedister.aspx.cs内容
protected string Username;
    protected string Pwd;
    protected string Email;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request["b_N"] != null)
        {
            Username = Common.DEncrypt.DESEncrypt.Decrypt(Request["b_N"],

"edfck8745debc778888"); //解密用户名
        }
        if (Request["b_P"] != null)
        {
            Pwd = Common.DEncrypt.DESEncrypt.Decrypt(Request["b_P"],

"edfck8745debc778888");//解密密码
        }
        if (Request["b_E"] != null)
        {
            Email = Request["b_E"];
        }
}
3. 用户密码的修改 (直接操作数据库;注意discuz密码加密方式先用新密码a进行一次MD5加密32

位,然后用a+(“discuz_uc_members表中的salt字段的值”))在进行一次MD5加密

public void BBSPwdUpdate(string name, string pwd)
    {
        string constr =

"host=121.9.1.1;database=discuz;UserName=dbusername;password=123456";
        string res = GetRegistrerCodeByName(UserName.ToString());
        string pwd1 = Common.StrHelper.Md5(pwd, 32).ToString();
        string pwd2 = Common.StrHelper.Md5((pwd1 + res), 32).ToString();
        string sql = "update cdb_members set password ='" + pwd2 + "' where username = '" +

name + "'";
        string sql1 = "update cdb_uc_members set password ='" + pwd2 + "' where username =

'" + name + "'";
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            try
            {
                con.Open();
                MySqlCommand cmd = new MySqlCommand(sql, con);
                MySqlCommand cmd1 = new MySqlCommand(sql1, con);
                cmd.ExecuteNonQuery();
                cmd1.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }

public string GetRegistrerCodeByName(string name)
    {
        string constr =

"host=121.9.1.1;database=discuz;UserName=dbusername;password=123456";
        string sql = "select salt from cdb_uc_members where username='" + name + "'";
        string res = "";
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            try
            {
                con.Open();
                MySqlCommand com = new MySqlCommand(sql, con);
                res = com.ExecuteScalar().ToString();
            }
            catch (MySqlException ex)
            {
                throw new Exception(ex.Message);
            }
        }
        return res;
    }

三、mysql远程连接失败解决方法
   1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那

台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从“localhost”

改称“%” 
mysql -u root -pvmwaremysql>use mysql;
mysql>update user set host = ‘%’ where user = ‘root’;
mysql>select host, user from user;
2. 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'%’ IDENTIFIED BY ‘mypassword’ WI
TH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'192.168.1.3′ IDENTIFIED BY
‘mypassword’ WITH GRANT OPTION; 
我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH PRIVILEGES
使修改生效.就可以了

个人中心的 密码及安全问题链接去掉
把templates 下的 personal_navbar.htm 下的
  <li><a href="memcp.php?action=profile&typeid=1">{lang

memcp_profile_security}</a></li>
去掉,
如果不更新缓存把
1_memcp_profile.tpl.php 中的该链接也去掉

其它有登录,注册链接要改掉的话方法类似,找到对应的模板改掉即可,有时需要更新下缓存.

你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'%’ IDENTIFIED BY ‘mypassword’ WI
TH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'192.168.1.3′ IDENTIFIED BY
‘mypassword’ WITH GRANT OPTION; 
我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH PRIVILEGES
使修改生效.就可以了

个人中心的 密码及安全问题链接去掉
把templates 下的 personal_navbar.htm 下的
  <li><a href="memcp.php?action=profile&typeid=1">{lang

memcp_profile_security}</a></li>
去掉,
如果不更新缓存把
1_memcp_profile.tpl.php 中的该链接也去掉

其它有登录,注册链接要改掉的话方法类似,找到对应的模板改掉即可,有时需要更新下缓存.

discuz论坛与其它网站登录注册整合的更多相关文章

  1. 网站登录注册-Session 和token的总结

    1.为什么要使用session 因为http本身是无状态协议,无法确定你的本次请求和上次请求是不是你发送的.如果要进行类似论坛登陆相关的操作,就实现不了了. 2.Session 生成方式 浏览器第一次 ...

  2. DISCUZ! X2.5设置仅允许QQ登录注册论坛 加固会员注册机制

    论坛稍微有点起色之后,很多站长就会担心论坛经常被人恶意灌水.注册机.顶贴机等等一些列非法的手段.通常站长都会通过一些后台的设置和插件等等一 切有效的方法预防,但更多的站长会通过限制用户注册会员,需注册 ...

  3. java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

    标题有点问题,没有进行修改. 一 Discuz论坛搭建步骤 1:服务器环境配置 服务器要支持php语言+支持mysql 5.0以上的数据库 + Apache服务器(支持网站的一个服务器,通过域名的能访 ...

  4. Discuz!NT 3.5.2正式版与Asp.net网站会员信息整合

    Discuz!NT 提供了很多对外的接口利于与别的网站进行整合,经本人亲测,觉得开放的接口还是挺到位的.开发.测试一次通过,只不过api文档寻找无门,只能自己琢磨,费了不少周折,不过,功夫不负有心人, ...

  5. 织梦dedecms整合discuz论坛的操作方法

    织梦dedecms和discuz论坛整合主要用途,是让两个系统共享用户数据,同一个用户可以在两个网站都可以登录.在我们制作织梦cms模板的时候,有时需要整合discuz里的东细.本文主要讲解一下ded ...

  6. Discuz! X2.5判断会员登录状态及外部调用注册登录框

    Discuz! X2.5判断会员登录状态及外部调用注册登录框 有关discuz论坛会员信息,收集的一些资料: 用dedecms+discuz做了个门户加论坛形式的网站,但是dedecms顶部目前只能q ...

  7. jsp网站与discuz论坛用户同步

    需求分析: 要想实现A(jsp网站)和B(discuz论坛)的同步,这里说的同步指的是 在AB网站任意一方注册之后在另一方都可以直接登录 AB两网站之间的用户登陆状态是同步的,在任意一方登录后,另一方 ...

  8. 织梦系统与discuz论坛整合方法

    如何完成dedecms模板系统与discuz论坛整合呢? 这里的整合指会员信息,会员登陆.退出的同步:论坛信息的引用:等等. 首先,我们先来安装织梦(dedecms)系统. 然后,我们在网站根目录下建 ...

  9. web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)

    这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...

随机推荐

  1. iOS开发拓展篇—CoreLocation定位服务

    iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...

  2. 分享记录我的Linux系统入门学习经验

    人生很多事情都是巧合,或者说命中注定.就拿Linux于我来说,大学期间也修了Linux基础这门课,但是从来没有想到自己会从事与Linux相关的工作,更没有想过自己可以通过Linux获取更多的东西. 真 ...

  3. Selenium - CSS Selector

    Selenium - CSS Selector http://www.cnblogs.com/bugua/archive/2012/08/16/2641647.html   昨天我练习了用CSS(即层 ...

  4. Solr安装入门、查询详解

    Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...

  5. PHP中file_put_contents追加时换行

    很多时候记录日志需要换行.不建议使用\r\n,因为:在windows中\r\n是换行在Mac中\r是换行在Liunx中\n是换行 但是PHP提供了一个常量来匹配不同的操作系统,即: file_put_ ...

  6. transform scale

  7. Codeforces Round #379 (Div. 2) 解题报告

    题目地址 本次CF是在今天早上深夜进行,上午有课就没有直接参加.今天早上上课坐到后排参加了virtual participation.这次CF前面的题目都非常的水,不到10分钟就轻松过了前两题,比较郁 ...

  8. Node.js 全局对象

    JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可 以在程序的任何地方访问,即全局变量. 在浏览器JavaScript 中,通常window 是全 ...

  9. Spring 整合 Hibernate

    Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 OR ...

  10. autotools工具使用记录

    参考 http://blog.chinaunix.net/uid-25100840-id-271131.html http://blog.sina.com.cn/s/blog_4c2bf01a0101 ...