主頁(yè) > 知識(shí)庫(kù) > 使用redis管理用戶登錄會(huì)話的方法

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

熱門(mén)標(biāo)簽:最簡(jiǎn)單的百度地圖標(biāo)注 竹間科技AI電銷機(jī)器人 百度商家地圖標(biāo)注怎么做 地圖標(biāo)注費(fèi)用 太原營(yíng)銷外呼系統(tǒng) 小紅書(shū)怎么地圖標(biāo)注店 地圖標(biāo)注如何即時(shí)生效 玄武湖地圖標(biāo)注 西藏教育智能外呼系統(tǒng)價(jià)格

登錄和cookie緩存

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

簽名cookie通常會(huì)存儲(chǔ)用戶名,可能還有用戶ID、用戶最后一次成功登陸的時(shí)間,以及網(wǎng)站覺(jué)得有用的其他任何信息。除了用戶的相關(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寫(xiě)的一個(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í)間戳訪問(wèn)的商品名字
   conn.zremrangeByRank("viewd:"+token, 0, -26);//移除就的用戶記錄,只保留用戶瀏覽過(guò)的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);
     SetString> tokensSet=conn.zrange("recent:", 0, endIndex-1);
     String[] tokens=tokensSet.toArray(new String[tokensSet.size()]);
     ArrayListString> 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è)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解Redis開(kāi)啟遠(yuǎn)程登錄連接
  • 詳解Redis使用認(rèn)證密碼登錄
  • redis-cli 使用密碼登錄的實(shí)例
  • 基于Redis無(wú)序集合如何實(shí)現(xiàn)禁止多端登錄功能

標(biāo)簽:廣東 香港 林芝 澳門(mén) 贛州 唐山 揚(yáng)州 景德鎮(zhèn)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用redis管理用戶登錄會(huì)話的方法》,本文關(guān)鍵詞  使用,redis,管理,用戶,登錄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用redis管理用戶登錄會(huì)話的方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于使用redis管理用戶登錄會(huì)話的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章