一、從Redis管理Session
1、什麼是Redis?
Redis是一個開源的全內存的數據結構存儲系統,可以使用作為資料庫,緩存和消息中間件。Redis支持諸如字元串,哈希,列表,集合,帶有升序或者降序的有序集合等數據結構。
2、Redis用於Session管理的原因是什麼?
由於PHP的Session默認是使用文件儲存的,當頁面並發較高時會對伺服器造成很大的壓力,很容易導致伺服器宕機。而使用Redis作為Session管理工具,可以提高伺服器的性能,減少伺服器崩潰的可能性。
3、如何將PHP的Session儲存在Redis中?
session_save_handler('redis'); session_save_path('tcp://127.0.0.1:6379'); session_start();
二、SpringBoot Session管理
1、什麼是SpringBoot?
SpringBoot是一個基於Spring框架的快速開發腳手架,它用來構建單個通用的JVM應用程序,可以在最小的開發時間內輕鬆創建和運行Spring應用程序。
2、SpringBoot如何管理Session?
通過在SpringBoot項目中使用Spring Session模塊可以管理Session。Spring Session是一個用於管理用戶會話的框架,它支持絕大多數會話管理解決方案,如默認的基於Cookie的會話管理、Spring Session提供的基於Redis的會話管理、分散式會話管理。
3、如何使用SpringBoot管理Session?
// 添加Spring Session依賴 <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>2.2.2.RELEASE</version> </dependency> // 配置Redis連接信息 @Configuration @EnableRedisHttpSession public class RedisSessionConfig { @Bean public LettuceConnectionFactory connectionFactory() { return new LettuceConnectionFactory(new RedisStandaloneConfiguration("localhost", 6379)); } }
三、Shiro Session管理
1、什麼是Shiro?
Shiro是一個很好的Java安全框架,能為應用程序提供安全管理功能。它為應用程序的安全提供了一種簡單和易於理解的編程介面,將多種安全服務組合在一起,包括授權、認證、加密、會話管理等。
2、Shiro如何管理Session?
Shiro提供了一個SessionManager介面,用於處理Session管理的創建、啟動、停止、刪除等操作。可以使用實現SessionDAO介面的資料庫或者緩存來儲存管理Session信息。
3、如何使用Shiro管理Session?
// 配置Shiro的SessionManager @Bean public SessionManager sessionManager() { DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setGlobalSessionTimeout(1800000); sessionManager.setSessionDAO(redisSessionDAO()); sessionManager.setSessionFactory(sessionFactory()); sessionManager.setDeleteInvalidSessions(true); return sessionManager; } // 配置RedisSessionDAO @Bean public RedisSessionDAO redisSessionDAO() { RedisSessionDAO redisSessionDAO = new RedisSessionDAO(); redisSessionDAO.setRedisManager(redisManager()); return redisSessionDAO; }
四、Session管理方式
1、什麼是Session?
Session是由伺服器創建的用於保存伺服器與客戶端會話狀態的一種機制。常用於保存用戶的登錄信息、用戶在服務端的一些操作信息等。
2、Session管理方式有哪些?
通過Cookie、Session ID、隱藏欄位、URL 重寫等方式來管理Session。
3、Session管理方式有什麼優缺點?
通過Cookie保存Session ID的方式,相對比較安全可靠,但受限於同源策略,不能跨域訪問;通過URL重寫的方式,能夠實現跨域訪問,但會暴露Session ID,存在安全風險。
五、多個服務部署時Session管理選取
1、多個服務部署時需要注意什麼?
多個服務部署時,同一用戶的請求有可能被分配到不同的服務中,這會導致Session數據的不一致。因此,在進行分散式部署時,需要保證Session數據的一致性。
2、Session複製管理和Session共享管理的區別是什麼?
Session複製管理,可以將Session信息複製到各個服務中,使得各個服務之間擁有同樣的Session數據。但是這種方式會帶來一定的延遲;Session共享管理,則是集中維護Session數據,各服務只需要從集中的Session伺服器中獲取Session數據即可,從而避免了Session數據不一致、系統複雜化等問題。
3、如何實現Session共享管理?
常用的實現方式有:推薦使用Redis、使用zookeeper、使用Memcache等。
參考資料:
1.SpirngReference官網:https://docs.spring.io/spring-session/docs/current/reference/html5/
2.Redis官網:https://redis.io/
3.Shiro官網:https://shiro.apache.org/
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279442.html