关于安全性,前后台共同验证

简介:

前台过滤

复制代码
teachers_jq.on('click', '.teacher:not(.trained)', function (event) {
        var jq = $(event.target);
        var id = jq.data('id');
        var name = jq.text();
        var params = {
            train:train,
            user_id:id,
            user_name:name
        }
        $.ajax({
            type:"POST",
            url:"/default/index/ajax/do/ajaxtrainmem",
            data:params,
            success:function(response){
                if(response==0){
                  alert("请重试!");
                }else if(response==2){
                  alert("已存在,请勿重复点击!");
                }else{
                    jq.addClass('trained');
                    trained_jq.fc_tagbox().add_tag(name, id);
                    hide_detail();
                }
            }
        });
    });
复制代码

通过:not(.trained)过滤,避免多次点击,触发事件!

 

后台过滤,如果真多次触发了,后台进行过滤

复制代码
$data["user_id"] = trim($this->_getParam("user_id"));
                    $data["user_name"] = trim($this->_getParam("user_name"));
                    $traininfo = trim($this->_getParam("train"));
                    list($data['training_id'] , $data['training_name'] , $data['training_level'] , $data['training_passtime'] , $data['training_startime'] , $data['training_endtime'] , $data['training_note'] , $data['semester_id'] , $data['semester_name'] , $data['year']) = explode("#", $traininfo);
                    $where['lx_trainingmember.user_id = ?'] = array('type'=>1,'val'=>$data["user_id"]);
                    $where['lx_trainingmember.training_id = ?'] = array('type'=>1,'val'=>$data['training_id']);
                    
                    $aTrain = $daoTraining->getTraAndMem($where);
                    if($aTrain){
                        echo 2;
                    }else{
                        $res = $daoTraining->addTrainingmember($data);
                        if ($res) {
                            echo 1;
                        }else{
                            echo 0;
                        }
                    }
复制代码

验证数据库中是否已存在数据,存在就返回2,提示重复点击了。

 

效果如下:



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/3794881.html,如需转载请自行联系原作者


相关文章
|
1月前
|
存储 数据库 数据安全/隐私保护
用户认证过程的详细解析,保护你的数据安全
用户认证过程的详细解析,保护你的数据安全
25 3
|
2月前
|
数据采集 存储 安全
数据功能验证
数据功能验证
38 4
|
3月前
|
存储 JSON 安全
用户登录注册系统的安全性设计
用户登录注册系统的安全性设计
34 4
|
9月前
|
存储 前端开发 安全
强化用户体验与安全性:前端单点登录和统一认证的最佳实践与区别
互联网发展了这么多年,各种更新皆为了提供更好更安全的上网环境。同时为了提供更好的用户体验、减少用户反复输入用户名和密码的繁琐操作,并确保账户安全,前端领域中的单点登录(SSO)和统一认证(Unified Authentication)成为了重要概念。
强化用户体验与安全性:前端单点登录和统一认证的最佳实践与区别
|
6月前
|
前端开发 JavaScript API
“构建完善的用户认证与数据交互系统“
“构建完善的用户认证与数据交互系统“
39 0
|
10月前
|
存储 前端开发
网络基础 登录对接CAS-跨域导致的一个意想不到的Bug
网络基础 登录对接CAS-跨域导致的一个意想不到的Bug
144 1
|
11月前
|
数据安全/隐私保护 安全 供应链
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(1)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(1)
|
11月前
|
区块链 数据安全/隐私保护 安全
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(2)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(2)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(2)
|
11月前
|
安全 数据安全/隐私保护 网络安全
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(3)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(3)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第4章 SSI 记分卡:SSI 的主要功能和优点(3)
|
11月前
|
存储 安全 物联网
带你读《自主管理身份:分布式数字身份和可验证凭证》——第3章 用示例场景演示SSI工作原理(2)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第3章 用示例场景演示SSI工作原理(2)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第3章 用示例场景演示SSI工作原理(2)