久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

使用redis管理用戶登錄會話的方法

120次閱讀
沒有評論

共計 2025 個字符,預計需要花費 6 分鐘才能閱讀完成。

登錄和 cookie 緩存

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

簽名 cookie 通常會存儲用戶名,可能還有用戶 ID、用戶最后一次成功登陸的時間,以及網站覺得有用的其他任何信息。除了用戶的相關信息外,簽名 cookie 還包含一個簽名,服務器可以使用這個簽名來驗證發送的信息是否未經改動(比如將 cookie 中的登錄用戶名改成另一個客戶)。

令牌 cookie 會在 cookie 里面存儲一串隨機字節作為令牌,服務器可以根據令牌在數據庫中查找令牌的擁有者。下表展示了簽名 cookie 和令牌 cookie 的優點與缺點。


簽名 cookie
驗證 cookie 所需的一切信息都存儲在 cookie 里面。cookie 可以包含額外的信息(additional information),并且對這些信息進行簽名也很容易
正確地處理簽名很難。很容易忘記對數據進行簽名,或者忘記驗證數據的簽名,從而造成安全漏洞

令牌 cookie
添加信息非常容易。cookie 的體積非常小,因此移動端和速度較慢的客戶端可以更快地發送請求
需要在服務器中存儲更多信息。如果使用的是關系數據庫,那么載入和存儲 cookie 的代價可能會更高

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 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 管理用戶登錄會話的方法就是丸趣 TV 小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持丸趣 TV。

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計2025字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 广昌县| 文山县| 安达市| 库车县| 紫阳县| 阳谷县| 舟曲县| 宜章县| 亳州市| 威宁| 来凤县| 门头沟区| 云林县| 获嘉县| 敦煌市| 黎川县| 洪江市| 商洛市| 曲沃县| 鲁山县| 柯坪县| 彰化县| 天津市| 三明市| 樟树市| 宁都县| 祁阳县| 德清县| 郸城县| 明水县| 隆尧县| 乌什县| 应城市| 洮南市| 桓仁| 屏山县| 仙游县| 社会| 遵义县| 东港市| 黄龙县|