国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Redis > 正文

使用redis管理用戶登錄會(huì)話的方法

2020-10-28 21:33:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

登錄和cookie緩存

對(duì)于用來(lái)登錄的cookie,有兩種常見的方法可以將登錄信息存儲(chǔ)在cookie里面:一種是簽名(signed)cookie,另一種是令牌(token)cookie。

簽名cookie通常會(huì)存儲(chǔ)用戶名,可能還有用戶ID、用戶最后一次成功登陸的時(shí)間,以及網(wǎng)站覺得有用的其他任何信息。除了用戶的相關(guān)信息外,簽名cookie還包含一個(gè)簽名,服務(wù)器可以使用這個(gè)簽名來(lái)驗(yàn)證發(fā)送的信息是否未經(jīng)改動(dòng)(比如將cookie中的登錄用戶名改成另一個(gè)客戶)。

令牌cookie會(huì)在cookie里面存儲(chǔ)一串隨機(jī)字節(jié)作為令牌,服務(wù)器可以根據(jù)令牌在數(shù)據(jù)庫(kù)中查找令牌的擁有者。下表展示了簽名cookie和令牌cookie的優(yōu)點(diǎn)與缺點(diǎn)。

cookie類型 優(yōu)點(diǎn) 缺點(diǎn)
簽名cookie 驗(yàn)證cookie所需的一切信息都存儲(chǔ)在cookie里面。cookie可以包含額外的信息(additional information),并且對(duì)這些信息進(jìn)行簽名也很容易 正確地處理簽名很難。很容易忘記對(duì)數(shù)據(jù)進(jìn)行簽名,或者忘記驗(yàn)證數(shù)據(jù)的簽名,從而造成安全漏洞
令牌cookie 添加信息非常容易。cookie的體積非常小,因此移動(dòng)端和速度較慢的客戶端可以更快地發(fā)送請(qǐng)求 需要在服務(wù)器中存儲(chǔ)更多信息。如果使用的是關(guān)系數(shù)據(jù)庫(kù),那么載入和存儲(chǔ)cookie的代價(jià)可能會(huì)更高

下面是用java寫的一個(gè)例子

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);//保存令牌最后一次出現(xiàn)的時(shí)間  if(item!=null){   conn.zadd("viewd:"+token, time, item);//根據(jù)這個(gè)令牌來(lái)設(shè)置該用戶在這個(gè)時(shí)間戳訪問的商品名字   conn.zremrangeByRank("viewd:"+token, 0, -26);//移除就的用戶記錄,只保留用戶瀏覽過的25個(gè)商品。   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:");//依據(jù)登錄時(shí)間確定在線人數(shù)    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<String> tokensSet=conn.zrange("recent:", 0, endIndex-1);     String[] tokens=tokensSet.toArray(new String[tokensSet.size()]);     ArrayList<String> 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管理用戶登錄會(huì)話的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 内江市| 桐城市| 平果县| 凯里市| 长汀县| 临城县| 乌海市| 普安县| 平利县| 宁阳县| 黄冈市| 两当县| 大荔县| 咸阳市| 榆树市| 易门县| 安福县| 徐水县| 山东| 鹤山市| 仙居县| 揭阳市| 诏安县| 永川市| 新泰市| 涪陵区| 淮阳县| 普安县| 喜德县| 商南县| 临颍县| 通城县| 栾川县| 开化县| 晋州市| 长寿区| 西平县| 兴国县| 工布江达县| 平武县| 商丘市|