使用redis管理用户登录会话的方法
发表于:2025-11-23 作者:千家信息网编辑
千家信息网最后更新 2025年11月23日,登录和cookie缓存对于用来登录的cookie,有两种常见的方法可以将登录信息存储在cookie里面:一种是签名(signed)cookie,另一种是令牌(token)cookie。签名cookie
千家信息网最后更新 2025年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); Set tokensSet=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安全错误
数据库的锁怎样保障安全
服务器硬件安装工艺
视频图像信息数据库
数据库管理类的证书
软件开发小白应该怎么做
二级数据库mysql
关于网络安全责任书
湖南软件开发要找岚鸿
软件开发人员分为
北航网络安全和安恒信息
广东gps校时服务器虚拟主机
软件开发定制有哪些公司
数据库检索意图
榆林app软件开发
软件开发者职位认知
用代理服务器玩游戏会被监控吗
警察网络安全总结
艾默生服务器电源改可调电源
安卓软件开发研究方法
网络安全公告词
游戏显示读取服务器列表
贵阳金蝶软件开发
河北巷子互联网科技有限公司
云服务器和云数据库的区别
土巴兔软件开发怎么样
购物app的数据库
网络安全知识主题创意稿
临沂德州软件开发公司
asp连接数据库文件地址
dp数据库
mdb数据库合并工具