分布式6大核心专题_分布式Session
文章目錄
- 一、Session存在服務(wù)器上還是tomcat中?
- 1. 創(chuàng)建springboot項(xiàng)目
- 2. 啟動(dòng)項(xiàng)目
- 3. 調(diào)用登錄接口
- 4. 調(diào)用獲取用戶信息接口
- 5. 重啟tomcat調(diào)用獲取用戶信息接口
- 二、Session與Cookie的關(guān)系
- 三、傳統(tǒng)Session
- 3.1. 啟動(dòng)項(xiàng)目
- 3.2. 瀏覽器測(cè)試
- 四、分布式Session解決方案
- 4.1. Spring Session + Redis
- 4.2. Token + Redis
- 4.3. Token + JWT
- 五、方案區(qū)別
一、Session存在服務(wù)器上還是tomcat中?
案例演示流程:
1.創(chuàng)建springboot項(xiàng)目
2.啟動(dòng)項(xiàng)目
3.調(diào)用登錄接口
4.調(diào)用獲取用戶信息接口
5.重啟tomcat調(diào)用獲取用戶信息接口
1. 創(chuàng)建springboot項(xiàng)目
pom
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>測(cè)試案例
package com.gblfy.distributed.session.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RequestMapping("/user") @RestController public class UserController {@GetMapping("/login")public String login(@RequestParam String username,@RequestParam String password,HttpSession session){//賬號(hào)密碼正確session.setAttribute("login_user", username);return "登錄成功";}@GetMapping("/info")public String info(HttpSession session) {return "當(dāng)前登錄的是:" + session.getAttribute("login_user");} }2. 啟動(dòng)項(xiàng)目
3. 調(diào)用登錄接口
#登錄接口 http://localhost:8081/user/login4. 調(diào)用獲取用戶信息接口
#獲取用戶信息接口 http://localhost:8081/user/info用戶登錄之后,獲取用戶信息,可以正常獲取
5. 重啟tomcat調(diào)用獲取用戶信息接口
發(fā)現(xiàn)在重啟tomcat調(diào)用獲取用戶信息接口,用戶信息為null
得出結(jié)論:說(shuō)明session不能實(shí)現(xiàn)共享,下面會(huì)繼續(xù)證明
二、Session與Cookie的關(guān)系
cookie 和session 的區(qū)別:
- 1.cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
- 2.cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session。 - 3.session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問(wèn)增多,會(huì)比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。 - 4.單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie
- 5.Session和Cookie是不分家的,Session就存放在瀏覽器請(qǐng)求的Header中的Set-Cookie這個(gè)屬性上
三、傳統(tǒng)Session
3.1. 啟動(dòng)項(xiàng)目
演示同一程序啟動(dòng)8081端口和8082端口模擬2個(gè)服務(wù)器分布式
3.2. 瀏覽器測(cè)試
1.調(diào)用8081登錄接口
2.調(diào)用8081獲取用戶信息接口,可以正常獲取用戶信息
3.調(diào)用8082獲取用戶信息接口,無(wú)法獲取用戶信息
得出結(jié)論:說(shuō)明session不能實(shí)現(xiàn)共享
四、分布式Session解決方案
4.1. Spring Session + Redis
https://gblfy.blog.csdn.net/article/details/113807497
4.2. Token + Redis
https://gblfy.blog.csdn.net/article/details/113807504
4.3. Token + JWT
https://gblfy.blog.csdn.net/article/details/113807506
五、方案區(qū)別
Jwt:token里面的內(nèi)容可以被解析,但是不能被篡改,因此,token中的不能存放敏感性信息
例如:密碼
Srpring-session/token+redis token 不能被解析,更不可能被篡改
總結(jié):關(guān)于采用哪種方案根據(jù)需求而定即可。
總結(jié)
以上是生活随笔為你收集整理的分布式6大核心专题_分布式Session的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 使用 zip4j 进行基本的压
- 下一篇: 使用npm失败解决方案