kwklover's blog

阿科的代码世界

« Discuz论坛及服务器优化的一些细节问题整理【备用】Lucene.Net的一些细节知识问答 »

动网论坛(Asp)转换到Discuz!PHP论坛的密码问题解决方式

    最近对一个地方门户的论坛,从Discuz!NT2.5转换到Discuz!PHP 7.0 ,由于论坛原来是从DVBBS(Asp) 转换到Discuz!NT的,所以仍然遗留了Asp时代的16位MD5密码问题,由于论坛比较小型,所以采用一种比较简单的解决方式:

1,修改Discuz!PHP 7.0论坛的logging.php文件。
   如果没有修改源代码的话,在87行代码,即:
$ucresult = uc_user_login($username, $password, $loginfield == 'uid', 1, $questionid, $answer);
  前面,加入如下的代码:

//对16位密码进行处理 == Start 
$query = $db->query("select uid,username,password,email from {$tablepre}members where username='{$username}'") ; 
if ($tempmember = $db->fetch_array($query)) 
{    
    if (strlen(trim($tempmember['password'])) == 16 && substr(md5($password),8,16) == trim($tempmember['password'])) //对ASP下的16位密码进行修正    
    {        
        uc_user_edit($username,$password,$password,$tempmember['email'],1);        
        $db->query("update {$tablepre}members set password='".md5($password)."' where username='{$username}'");    
    } 

//对16位密码进行处理 == End

2,如果安装了UCenter Home,还需要修改Ucenter Home 1.5的source/do_login.php文件
 如果没有修改源代码的话,在69行代码,即:
 if(!$passport = getpassport($username, $password)) {
 前面,加入如下代码:

//处理动网16位密码 ==Start 
//直接连接BBS数据库,获取用户密码,判断是否是16位密码 
$bbsdbname = "discuz" ; 
$bbsdblink = mysql_connect($_SC['dbhost'],$_SC['dbuser'],$_SC['dbpw']); 
mysql_query("SET character_set_connection=".$_SC['dbcharset'].",character_set_results=".$_SC['dbcharset'].",character_set_client=binary",$bbsdblink) ; 
mysql_select_db($bbsdbname,$bbsdblink) ; 
$bbsquery = mysql_query("select uid,username,password,email from cdb_members where username='{$username}'",$bbsdblink); 
if ($bbsuser = mysql_fetch_array($bbsquery)) 
{    
  if (strlen(trim($bbsuser['password'])) == 16 && substr(md5($password),8,16) == trim($bbsuser['password'])) //对ASP下的16位密码进行修正    
  {    
      uc_user_edit($username,$password,$password,$bbsuser['email'],1);    
      mysql_query("update cdb_members set password='".md5($password)."' where username='{$username}'",$bbsdblink);    
  } 

mysql_select_db($_SC['dbname'],$bbsdblink) ; 
mysql_close($bbsdblink); 
//处理动网16位密码 ==End

不过这样的解决方式耦合性比较强,要求论坛和UCH的账号,密码是一样的。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

版权信息

  • Powered By Z-Blog
  • Theme from keso By linc
  • Copyright kwklover.com. Some Rights Reserved.
    | 粤ICP备09115874号