使用redis管理用户登录会话的方法
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,登录和cookie缓存对于用来登录的cookie,有两种常见的方法可以将登录信息存储在cookie里面:一种是签名(signed)cookie,另一种是令牌(token)cookie。签名cookie
千家信息网最后更新 2024年11月23日使用redis管理用户登录会话的方法
登录和cookie缓存
对于用来登录的cookie,有两种常见的方法可以将登录信息存储在cookie里面:一种是签名(signed)cookie,另一种是令牌(token)cookie。
签名cookie通常会存储用户名,可能还有用户ID、用户最后一次成功登陆的时间,以及网站觉得有用的其他任何信息。除了用户的相关信息外,签名cookie还包含一个签名,服务器可以使用这个签名来验证发送的信息是否未经改动(比如将cookie中的登录用户名改成另一个客户)。
令牌cookie会在cookie里面存储一串随机字节作为令牌,服务器可以根据令牌在数据库中查找令牌的拥有者。下表展示了签名cookie和令牌cookie的优点与缺点。
cookie类型 | 优点 | 缺点 |
---|---|---|
签名cookie | 验证cookie所需的一切信息都存储在cookie里面。cookie可以包含额外的信息(additional information),并且对这些信息进行签名也很容易 | 正确地处理签名很难。很容易忘记对数据进行签名,或者忘记验证数据的签名,从而造成安全漏洞 |
令牌cookie | 添加信息非常容易。cookie的体积非常小,因此移动端和速度较慢的客户端可以更快地发送请求 | 需要在服务器中存储更多信息。如果使用的是关系数据库,那么载入和存储cookie的代价可能会更高 |
下面是用java写的一个例子
import java.util.ArrayList;import java.util.Set;import redis.clients.jedis.Jedis;public class Login { public String checkToken(Jedis conn,String token){ return conn.hget("login:", token); } public void updateToken(Jedis conn,String token,String user,String item){ long time=System.currentTimeMillis()/1000; conn.hset("login:", token, user);//维持令牌与用户之间的映射 conn.zadd("recent:", time, token);//保存令牌最后一次出现的时间 if(item!=null){ conn.zadd("viewd:"+token, time, item);//根据这个令牌来设置该用户在这个时间戳访问的商品名字 conn.zremrangeByRank("viewd:"+token, 0, -26);//移除就的用户记录,只保留用户浏览过的25个商品。 conn.zincrby("viewd:", -1, item); } } public class CleanSessionsThread extends Thread{ private Jedis conn; private int limit; private boolean quit; public CleanSessionsThread(int limit) { // TODO Auto-generated constructor stub this.conn=new Jedis("localhost"); conn.select(15); this.limit=limit; } public void quit(){ quit=true; } @Override public void run() { // TODO Auto-generated method stub while(!quit){ long size=conn.zcard("recent:");//依据登录时间确定在线人数 if(size<=limit){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ long endIndex=Math.min(size-limit,100); SettokensSet=conn.zrange("recent:", 0, endIndex-1); String[] tokens=tokensSet.toArray(new String[tokensSet.size()]); ArrayList sessionKeys=new ArrayList<>(); for(String token:tokens){ sessionKeys.add("viewd:"+token); } conn.del(sessionKeys.toArray(new String[sessionKeys.size()])); conn.hdel("login:", tokens); conn.zrem("recent:", tokens); } } } }}
以上这篇使用redis管理用户登录会话的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
用户
令牌
信息
登录
存储
数据
时间
服务器
服务
验证
方法
优点
商品
客户
数据库
用户名
缺点
管理
安全
成功
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
代理服务器游戏
学生家庭教育和网络安全
华硕路由器服务器同步
福建拓普网络技术有限公司
数据库创建表年龄
学校网络安全工作规范
魔兽服务器每周关闭时间
csgo自己开服务器卡
a10服务器扩容
福州六贝网络技术
辽宁专升本数据库知识点总结
如何保护网络安全问题
网络安全运营存在的不足
电脑c盘服务器运行失败
凤凰天博网络技术有限公司
社会保障卡应用软件开发
广西网络安全工程联系方式
邮箱发信服务器
java软件开发证书报名
嘉定区网络营销网络技术备案
网络安全信息系统分几
ps游戏机当作服务器
win7远程桌面服务器
腾讯win服务器安全证书
后台常用数据库工具
怎么传文件到阿里云服务器
矿机软件开发
个人服务器需要多少钱
数据库cdc技术
优质软件开发地点