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

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

本帖最后由 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值