让ecshop会员修改自己信息增加密码问题验证
2016-09-07 22:02 来源:www.chinab4c.com 作者:ecshop专家
ecshop的会员用户中心,用户自己在修改用户信息时候,如果能增加上用户问题验证,能大大增加系统安全性,在优化上考虑是值得开发出这个功能,以下是chinab4c技术工程师提供的方法。 效果如下:
1.themes\\default\\user_transaction.dwt 将
<select name='sel_question'>
<option value='0'>{$lang.sel_question}</option>
{html_options options=$passwd_questions selected=$profile.passwd_question}
</select>
修改为
<select name='sel_question' onblur="checkSelQuestion(this.value);" id="sel_question">
<option value='0'>{$lang.sel_question}</option>
{html_options options=$passwd_questions selected=$profile.passwd_question}
</select>
<span id="sel_question_notice" style="color:#FF0000"> *</span>
将
<input name="passwd_answer" type="text" size="25" class="inputBg" maxlengt='20' value="{$profile.passwd_answer}"/><!-- {if $field.is_need} --><span style="color:#FF0000"> *</span><!-- {/if} -->
修改为
<input name="passwd_answer" type="text" size="25" class="inputBg" maxlengt='20' value="" id="passwd_answer" onblur="checkSelAnswer(this.value);"/><!-- {if $field.is_need} --><span id="passwd_answer_notice" style="color:#FF0000"> *</span><!-- {/if} -->
2.js\\user.js 找到function userEdit()中的
if (passwd_answer.length > 0 && sel_question == 0 || document.getElementById('passwd_quesetion') && passwd_answer.length == 0)
{
msg += no_select_question + '\\n'; //www.zuimoban.com
}
替换为
if(!checkAnswer(passwd_answer)){
msg += '- ' + '密码问题答案不正确' + '\\n';
}
在function userEdit()后添加
function checkAnswer(passwd_answer){
result = Ajax.call( 'user.php?act=check_passwd_answer', 'passwd_answer=' + passwd_answer, null , 'GET', 'TEXT', false );
result = result.replace(/^\\s+|\\s+$/g,"");
if ( result != "ok" ){
return false;
}else{
return true;
}
}
/* *
* 修改用户信息时验证密码问题
*/
function checkSelQuestion(sel_question){
if (sel_question == 0){
document.getElementById('sel_question_notice').innerHTML = '必须选择您的密码问题';
}
else{
result = Ajax.call( 'user.php?act=check_sel_question', 'sel_question=' + sel_question, null , 'GET', 'TEXT', false );
result = result.replace(/^\\s+|\\s+$/g,"");
if ( result == 'ok' ){
document.getElementById('sel_question_notice').innerHTML = '密码问题正确';
}
else{
document.getElementById('sel_question_notice').innerHTML = '请选择正确的密码问题';
}
}
}
/* *
* 修改用户信息时验证密码问题答案
*/
function checkSelAnswer(passwd_answer){
if (passwd_answer == 0){
document.getElementById('passwd_answer_notice').innerHTML = '必须填写您的密码问题答案';
}
else{
result = Ajax.call( 'user.php?act=check_passwd_answer', 'passwd_answer=' + passwd_answer, null , 'GET', 'TEXT', false );
result = result.replace(/^\\s+|\\s+$/g,"");
if ( result == 'ok' ){
document.getElementById('passwd_answer_notice').innerHTML = '密码问题答案正确';
}
else{
document.getElementById('passwd_answer_notice').innerHTML = '答案不正确请重新输入';
}
}
}
3.user.php中在
/* 用户登录界面 */
elseif ($action == 'login')
之前,添加
/*验证密码问题是否正确*/
elseif($action == 'check_sel_question'){
$sel_question = trim($_GET['sel_question']);
$question = $user->check_sel_question($user_id);
if (strcmp($sel_question, $question)!= 0){
echo 'false';
}
else{
echo 'ok';
}
}
/*验证密码问题答案是否正确*/
elseif($action == 'check_passwd_answer'){
$question = $user->check_sel_question($user_id);
$answer = $user->check_passwd_answer($user_id,$question);
$passwd_answer = trim($_GET['passwd_answer']);
if (strcmp($answer, $passwd_answer)!= 0){
echo 'false';
}
else{
echo 'ok';
}
}
4.includes\\modules\\integrates\\integrate.php,在
/* 会员手机的字段名 */
var $field_phone = '';
之后,添加
/* 会员问题的字段名 */
var $field_question = '';
/* 会员问题的回答字段名 */
var $field_answer = '';
在
/**
* 检查cookie是正确,返回用户名
*
* @access public
* @param
*
* @return void
*/
function check_cookie()
之上,添加
/**
* 检查指定密码问题是否为注册时设置的那个
*
* @access public
* @param string $user_id 用户id
*
* @return boolean
*/
function check_sel_question($user_id){
if (!empty($user_id)){
$sql = "SELECT passwd_question" . $this->field_question .
" FROM " . $this->table($this->user_table).
" WHERE " . $this->field_id . "='" . $user_id . "'";
return $this->db->getOne($sql);
}
}
/**
* 检查指定密码问题答案是否正确
*
* @access public
* @param string $user_id 用户id
* @param string $question 密码问题
*
* @return boolean
*/
function check_passwd_answer($user_id,$question){
if (!empty($user_id)){
$sql = "SELECT passwd_answer" . $this->field_answer .
" FROM " . $this->table($this->user_table).
" WHERE " . $this->field_id . "='" . $user_id . "' AND passwd_question" . " = '" .$question. "'";
return $this->db->getOne($sql);
}
}
完成。
(责任编辑:chinab4c) |
最近更新
常用插件
- ecshop最小购买数量控制插
ecshop最小购买数量控制插件,这个插件主要是为我们提供一个十分方便...
- ecshop二次开发商品购买增
图片1香...
- ecshop2.7.1邮件发送插件
ecshop2.7.1邮件发送插件:该插件主要的开发思想是源于ecshop短信发送系统...
- ecshop没登陆情况下订单查
ecshop没登陆情况下订单查询插件,主要是针对ecshop在没有登陆的情况下...
- ecshop2.7.2生成虚拟订单2.
以前我们开发过ecshop下的虚拟订单,就是客户在访问的时候,会自动生...
ecshop热门问答
ecshop热门资料
ecshop费用统计
ecshop桌面
ecshop安装问题
ecshop知名度
ecshop详解介绍
ecshopdenied
ecshop宝马3系
ecshop打不开来连接
ecshop模版问题
ecshop求援
ecshop一键式发货管理
ecshop郁闷
ecshop兑换
ecshopunserialize
ecshop动态图片
ecshopsetting
ecshop安全
ecshop源程序
ecshop屏蔽右键
ecshop红线
ecshopcheck
ecshop砍掉
ecshop滚动代码
ecshop虚拟商品
ecshop空白处
ecshop付款
ecshop添加到收藏车
ecshop急急急
ecshop图片处理
ecshop评价