使用复述,管理用户登录会话的方法

  

  

对于用来登录的饼干,有两种常见的方法可以将登录信息存储在饼干里面:一种是签名饼干(签署),另一种是令牌(令牌)饼干。

  

签名饼干通常会存储用户名,可能还有用户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(“最近:“令牌);   }   }   }   }   } 之前      

以上这篇使用复述,管理用户登录会话的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

使用复述,管理用户登录会话的方法