Maison  >  Article  >  développement back-end  >  【用户验证】这样的思路验证用户是否登录的有没有漏洞、有关问题

【用户验证】这样的思路验证用户是否登录的有没有漏洞、有关问题

WBOY
WBOYoriginal
2016-06-13 11:59:29951parcourir

【用户验证】这样的思路验证用户是否登录的有没有漏洞、问题

本帖最后由 default7 于 2014-05-25 13:31:32 编辑 考虑的是服务器最大限度的减少SQL查询。
SESSION如果浏览器关闭就失效,所以改用COOKIE,写了如下方式来检测用户是否登录。

代码如下:
<br>/**<br> * 初始化,用户COOKIE数据验证 by default7#zbphp.com<br> */<br>public function authCheck()<br>{<br>    if (cookie('uid')) {<br>        $uid = cookie('uid');<br>        $umd5 = cookie('umd5');<br>        $udata = cookie('udata');<br>        if (isUid($uid) && isMd5($umd5) && $udata && ($strDecode = authcode($udata, 'DECODE'))<br>            && md5($strDecode) == $umd5 && ($data = json_decode($strDecode)) && $data['uid'] == $uid) {<br><br>            //每隔60s必须查询SQL检测一次<br>            if ($this->time - $data['lastactive'] > self::INTERVAL) {<br>                if (($rsUser = M('Member')->where("mid='$uid'")->getField('mid,uname,pwd,vip,viptime1,viptime2,lastactive,isfbd'))<br>                    && strtolower($rsUser['uname']) == strtolower($data['uname'])<br>                    && strtolower($rsUser['email']) == strtolower($data['email'])<br>                    && md5($rsUser['pwd'].$data['salt']) == $data['upwd']<br>                ) {<br><br>                    if($rsUser['isfbd'] == 't'){<br>                        $this->error('您的账号已被封禁,请联系管理员!');<br>                        $this->resetUser();<br>                        return;<br>                    }<br><br>                    //更新最后在线时间<br>                    M('Member')->setField('lastactive',$this->time);<br><br>                    //重新生成加密密匙<br>                    $data['salt'] = uniqid();<br>                    $data['upwd'] = md5($rsUser['pwd'].$data['salt']);<br><br>                }else{<br><br>                    $this->error('账号信息(邮箱或密码)发生变化,请重新登录!','',U('Member/Index/login?f='.__URL__));<br>                    $this->resetUser();<br>                    return;<br><br>                }<br>            }<br><br>            $data['lastactive'] = $this->time;<br><br>            $this->UserData = $data;<br><br>            $strEncode = json_encode($data);<br><br>            //配置COOKIE默认10天过期<br>            cookie('uid',$data['uid']);<br>            cookie('umd5',md5($strEncode));<br>            cookie('udata',authcode($strEncode,'ENCODE'));<br><br>            return;<br>        }<br><br>        $this->resetUser();<br>    }<br>}<br><br>/**<br> * 注销SESSION 所有<br> *<br> * @return bool<br> */<br>public function resetUser()<div class="clear">
                 
              
              
        
            </div>
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:PHPExcel无法加入图片Article suivant:有关PDO防sql注入有关问题