对于用来登录的饼干,有两种常见的方法可以将登录信息存储在饼干里面:一种是签名饼干(签署),另一种是令牌(令牌)饼干。
签名饼干通常会存储用户名,可能还有用户ID,用户最后一次成功登陆的时间,以及网站觉得有用的其他任何信息。除了用户的相关信息外,签名饼干还包含一个签的名,服务器可以使用这个签名来验证发送的信息是否未经改动(比如将cookie中的登录用户名改成另一个客户)。
令牌饼干会在饼干里面存储一串随机字节作为令牌,服务器可以根据令牌在数据库中查找令牌的拥有者。下表展示了签名饼干和令牌饼干的优点与缺点。
饼干类型 优点 缺点 签名饼干 验证饼干所需的一切信息都存储在饼干里面.cookie可以包含额外的信息(附加信息),并且对这些信息进行签名也很容易 正确地处理签名很难。很容易忘记对数据进行签名,或者忘记验证数据的签的名,从而造成安全漏洞 令牌饼干 添加信息非常容易.cookie的体积非常小,因此移动端和速度较慢的客户端可以更快地发送请求 需要在服务器中存储更多信息。如果使用的是关系数据库,那么载入和存储饼干的代价可能会更高
进口java.util.ArrayList; 进口java.util.Set; 进口redis.clients.jedis.Jedis; 公共类登录{ 公共字符串checkToken(康涅狄格州能字符串标记){ 返回conn.hget(“登录:“令牌); } 公共空updateToken(康涅狄格州能字符串标记,字符串的用户,字符串条目){ 长时间=System.currentTimeMillis ()/1000; conn.hset(“登录:“令牌,用户);//维持令牌与用户之间的映射 conn.zadd(“最近的:“时间,令牌);//保存令牌最后一次出现的时间 如果(项目!=null) { conn.zadd (“viewd:“+令牌、时间、项目);//根据这个令牌来设置该用户在这个时间戳访问的商品名字 conn.zremrangeByRank (“viewd:”+令牌,0,-26);//移除就的用户记录,只保留用户浏览过的25个商品。 conn.zincrby (“viewd:”1项); } } 公共类CleanSessionsThread扩展线程{ 私人康涅狄格州能; 私人int限制; 私人布尔辞职; 公共CleanSessionsThread (int限制){//TODO自动生成构造函数存根 这一点。康涅狄格州=新能(“localhost”); conn.select (15); this.limit=限制; } 公共空间退出(){ 辞职=true; } @Override 公共空间run () {//TODO自动生成方法存根 而(辞职){ 长尺寸=conn.zcard("最近:");//依据登录时间确定在线人数 如果(size<=限制){ 尝试{ thread . sleep (1000); }捕捉(InterruptedException e) {//TODO自动生成的catch块 e.printStackTrace (); } 其他}{ 长endIndex=Math.min(大小限制,100); SettokensSet=康涅狄格州。最近zrange (“:“0 endIndex-1); String[]令牌=tokensSet。toArray(新的字符串(tokensSet.size ())); ArrayList ,sessionKeys=new ArrayList<的在(); (字符串标记:令牌){ sessionKeys.add (“viewd:“+令牌); } conn.del (sessionKeys.toArray(新的字符串(sessionKeys.size ()))); conn.hdel(“登录:“令牌); conn.zrem(“最近:“令牌); } } } } } >之前 以上这篇使用复述,管理用户登录会话的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
使用复述,管理用户登录会话的方法