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

如何解决Cookie登录 频繁查询数据库问题?

如何解决Cookie登录 频繁查询数据库问题?

墨色风雨 2019-03-14 18:15:01
实现所谓的无状态,使用Cookie认证的话,不用session岂不是每次都要重新认证查一下数据库?我的具体实现是定义 一个秘钥 key="随机";user_profile表 里面放一个字段 token 用户注册的时候,分配一个随机值用户登录的时候,String userToken= md5(用户id+token+key);response.addCookie("user_id",用户id);response.addCookie("user_token",userToken);然后定义一个登录拦截器String userId = request.getCookie("user_id");String userToken= request.getCookie("user_token");String token=db.getUserTokenById(userId); //这里每次都要查询一下数据库String userToken2= md5(用户id+token+key);if(userToken.equals(userToken2){//登录成功} else{}这次方式虽然简单,但是还是能够有效防止伪造cookie的但是这里每次都要查询一下数据库,有没有更好的实现方式
查看完整描述

5 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

既然对于整个事务来说,查询是必须的,那么就应该考虑提高查询效率,根据实际需求像memcache,redis这种键值对形式的数据存储方式就显得很必要了,既能满足数据存储要求,又能缓解性能问题。


查看完整回答
反对 回复 2019-04-18
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

不需要每次都查询数据库,token 放入内存做 cache,下次只要查一下 cache,token是否有效,是否过期就行了

token: {
uid: xxx
expired: xxx
}


查看完整回答
反对 回复 2019-04-18
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

不要存数据库里面,用memcache或redis,既解决分布式的问题同时性能也很高。


查看完整回答
反对 回复 2019-04-18
?
凤凰求蛊

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

可以考虑NoSQL


查看完整回答
反对 回复 2019-04-18
  • 5 回答
  • 0 关注
  • 853 浏览
慕课专栏
更多

添加回答

举报

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