> 2023/6/18 > > 本篇章記錄學習過程C++的基礎概念和代碼測試實現,還有很多需要補充。一是還不清楚,二是還沒有學到。打算學習過程中後面再做補充。先看完《C++primer 》書之後再慢慢來添加補充 # 1.函數重載 1. 一個函數名可以實現多個功能,這取決於函數參數不同來實現判斷對應的 ...
一、需求分析
如圖所示,一般網站的登錄界面都會有一個 [記住我]
按鈕,當你勾選它登錄後,即使你關閉瀏覽器再次打開網站,也依然會處於登錄狀態,無須重覆驗證密碼:
本文將詳細介紹在 Sa-Token中,如何做到以下登錄模式:
- 記住我登錄:登錄後關閉瀏覽器,再次打開網站登錄狀態依然有效,無需重覆登錄。
- 僅本次有效登錄:登錄後關閉瀏覽器,再次打開網站登錄狀態將失效,需要再次登錄。
- 七天免登錄:為登錄狀態設定一個詳細的有效期,在這個期限內無需重覆登錄,過了期限後需要再次登錄。
Sa-Token 是一個輕量級 java 許可權認證框架,主要解決登錄認證、許可權認證、單點登錄、OAuth2、微服務網關鑒權 等一系列許可權相關問題。
首先在項目中引入 Sa-Token 依賴:
<!-- Sa-Token 許可權認證 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.34.0</version>
</dependency>
註:如果你使用的是 SpringBoot 3.x
,只需要將 sa-token-spring-boot-starter
修改為 sa-token-spring-boot3-starter
即可。
二、在 Sa-Token 中實現記住我功能
Sa-Token的登錄授權,預設就是[記住我]
模式,為了實現[非記住我]
模式,你需要在登錄時如下設置:
// 設置登錄賬號id為10001,第二個參數指定是否為[記住我],當此值為false後,關閉瀏覽器後再次打開需要重新登錄
StpUtil.login(10001, false);
那麼,Sa-Token實現[記住我]
的具體原理是?
三、實現原理
Cookie作為瀏覽器提供的預設會話跟蹤機制,其生命周期有兩種形式,分別是:
- 臨時Cookie:有效期為本次會話,只要關閉瀏覽器視窗,Cookie就會消失。
- 持久Cookie:有效期為一個具體的時間,在時間未到期之前,即使用戶關閉了瀏覽器Cookie也不會消失。
利用Cookie的此特性,我們便可以輕鬆實現 [記住我] 模式:
- 勾選 [記住我] 按鈕時:調用
StpUtil.login(10001, true)
,在瀏覽器寫入一個持久Cookie
儲存 Token,此時用戶即使重啟瀏覽器 Token 依然有效。 - 不勾選 [記住我] 按鈕時:調用
StpUtil.login(10001, false)
,在瀏覽器寫入一個臨時Cookie
儲存 Token,此時用戶在重啟瀏覽器後 Token 便會消失,導致會話失效。
動態演示圖:
四、前後端分離模式下如何實現[記住我]?
此時機智的你