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

WBOY
Release: 2016-06-13 11:59:29
Original
952 people have browsed it

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

本帖最后由 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>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!