首先打開文件: /member/resetpassword.php 這是織夢(mèng)會(huì)員找回密碼的核心文件!
在148行有這么一句: showmsg('對(duì)不起,臨時(shí)密碼錯(cuò)誤', '-1'); 看來問題就在這了! 但是怎么引起的呢,別急繼續(xù)看代碼
從125行往下看:
if(isset($key)) $pwdtmp = $key; $sn = md5(trim($pwdtmp)); if($row['pwd'] == $sn) { if($pwd != "") { if($pwd == $pwdok) { $pwdok = md5($pwdok); $sql = "DELETE FROM `dede_pwd_tmp` WHERE `mid` = '$id';"; $db->executenonequery($sql); $sql = "UPDATE `dede_member` SET `pwd` = '$pwdok' WHERE `mid` = '$id';"; if($db->executenonequery($sql)) { showmsg('更改密碼成功,請(qǐng)牢記新密碼', 'login.php'); exit; } } } showmsg('對(duì)不起,新密碼為空或填寫不一致', '-1'); exit; } showmsg('對(duì)不起,臨時(shí)密碼錯(cuò)誤', '-1'); exit; |
這段代碼的意思是: 如果 row['pwd' 等于 $sn , 則修改密碼成功, 如果不等于 就提示:“對(duì)不起,臨時(shí)密碼錯(cuò)誤”
看來問題出在$pwdtmp 這個(gè)字段上, 這個(gè)字段值來自前臺(tái)resetpassword2.htm:
<?php if(empty($key)){ ?> <li><span>臨時(shí)驗(yàn)證碼:</span> <input name='pwdtmp' type="password" /> </li> <?php }else{ ?> <input name="key" type="hidden" value="<?php echo $key;?>" /> <?php }?> |
代碼看到這也許有人就暈了, 又出了一個(gè)字段:$key, 這段代碼的意思是:如果key為空 顯示: <input name='pwdtmp' type="password" /> ,如果不為空 顯示 :<input name="key" type="hidden" value="<?php echo $key;?>" />
看來根源問題就是$key, key值是系統(tǒng)發(fā)送給會(huì)員郵件的一個(gè)字段,打開文件:/member/inc/inc_pwd_functions.php 找到:
function newmail($mid, $userid, $mailto, $type, $send)
{
global $db,$cfg_adminemail,$cfg_webname,$cfg_basehost,$cfg_memberurl;
$mailtime = time();
$randval = random(8);
$mailtitle = $cfg_webname.":密碼修改";
$mailto = $mailto;
$headers = "From: ".$cfg_adminemail."/r/nReply-To: $cfg_adminemail";
$mailbody = "親愛的".$userid.":/r/n您好!感謝您使用".$cfg_webname."網(wǎng)。/r/n".$cfg_webname."應(yīng)您的要求,重新設(shè)置密碼:(注:如果您沒有提出申請(qǐng),請(qǐng)檢查您的信息是否泄漏。)/r/n本次臨時(shí)登陸密碼為:".$randval." 請(qǐng)于三天內(nèi)登陸下面網(wǎng)址確認(rèn)修改。/r/n".$cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&id=".$mid."&key=".$randval;
用紅字標(biāo)注的地方原文件是沒有的, 也就是沒用傳遞key值,需要加上&key=".$randval,問題就解決了,到此會(huì)員就可以通過郵件找回密碼了!



















