为了账号安全,请及时绑定邮箱和手机立即绑定

PHP判断用户登录状态,效率并且安全的方案是什么?

PHP判断用户登录状态,效率并且安全的方案是什么?

HUX布斯 2019-04-07 09:37:40
本人比较菜,目前使用的方案是1.在客户端COOKIES中保存用户ID和一个加密码(规则只有我知道)2.如果程序检测到客户端保存的COOKIESID。就去跟数据库验证加密码,如果一致则返回对应用户的登录信息,否则返回FALSE感觉效率和安全性都不是很好1.用户访问每个页面都要去跟数据库验证一遍2.加密码虽然规则很复杂,但是保存在客户端依然存在被破解的可能性
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

“用户访问每个页面都要去跟数据库验证一遍”这怎么会呢?1,浏览器URL访问页面资源,
2,查看SESSION会话是否记录登陆状态,如“否”从3继续,如“是”则到5
3,获取浏览器客户端的COOKIE用户标识信息,如果存在用户信息则继续4,如“否”或者不符合既定原则则到6
4,判断用户标识是否可信,比如将加密的字串解密,取出字串中的id和密码与数据库中信息对比是否匹配,如果匹配则到5,如果不匹配则6
5,验证登陆状态通过
6,验证登陆状态不通过如此看怎么会老是读数据库呢?分割线一般常规“记住登陆”方法,可以将ID和密码组合成字符串再salt加密后存到浏览器客户端。每次和服务器端验证时,再解密分割取得ID和密码与数据库比对。如此安全性还是可以的。比如这是存到客户端COOKIE$data=$id."\t".md5($password.$slat);//$slat可以是硬编或者随机存在用户列的值
$identity=base64_encode(encrypt($data,$key));//encrypt为自实现的加密函数或方法,$key可以是硬编或者随机存在用户列的值
setcookie("testuser",$identity,time()+3600);比如这是取if(isset($_COOKIE['testuser']))
{
$identity=$_COOKIE['testuser'];
list($id,$password)=explode("\t",decrypt(base64_decode($identity),$key));//decrypt为自实现的解密函数或方法,$key可以是硬编或者随机存在用户列的值
//todo与数据库列值比对
//...
}
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信