欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-15 13:18:18
...
【用户验证】这样的思路验证用户是否登录的有没有漏洞、问题
本帖最后由 default7 于 2014-05-25 13:31:32 编辑 考虑的是服务器最大限度的减少SQL查询。
SESSION如果浏览器关闭就失效,所以改用COOKIE,写了如下方式来检测用户是否登录。

代码如下:

/**
* 初始化,用户COOKIE数据验证 by default7#zbphp.com
*/
public function authCheck()
{
if (cookie('uid')) {
$uid = cookie('uid');
$umd5 = cookie('umd5');
$udata = cookie('udata');
if (isUid($uid) && isMd5($umd5) && $udata && ($strDecode = authcode($udata, 'DECODE'))
&& md5($strDecode) == $umd5 && ($data = json_decode($strDecode)) && $data['uid'] == $uid) {

//每隔60s必须查询SQL检测一次
if ($this->time - $data['lastactive'] > self::INTERVAL) {
if (($rsUser = M('Member')->where("mid='$uid'")->getField('mid,uname,pwd,vip,viptime1,viptime2,lastactive,isfbd'))
&& strtolower($rsUser['uname']) == strtolower($data['uname'])
&& strtolower($rsUser['email']) == strtolower($data['email'])
&& md5($rsUser['pwd'].$data['salt']) == $data['upwd']
) {

if($rsUser['isfbd'] == 't'){
$this->error('您的账号已被封禁,请联系管理员!');
$this->resetUser();
return;
}

//更新最后在线时间
M('Member')->setField('lastactive',$this->time);

//重新生成加密密匙
$data['salt'] = uniqid();
$data['upwd'] = md5($rsUser['pwd'].$data['salt']);

}else{

$this->error('账号信息(邮箱或密码)发生变化,请重新登录!','',U('Member/Index/login?f='.__URL__));
$this->resetUser();
return;

}
}

$data['lastactive'] = $this->time;

$this->UserData = $data;

$strEncode = json_encode($data);

//配置COOKIE默认10天过期
cookie('uid',$data['uid']);
cookie('umd5',md5($strEncode));
cookie('udata',authcode($strEncode,'ENCODE'));

return;
}

$this->resetUser();
}
}

/**
* 注销SESSION 所有
*
* @return bool
*/
public function resetUser()
【用户验证】这样的思路验证用户是否登录的有没有漏洞、有关问题

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 【用户验证】这样的思路验证用户是否登录的有没有漏洞、有关问题
  • 专题推荐