背景
瀏覽器發起請求--> 服務端創建session,會話建立--> 服務端返回sessionId作為cookie存儲在瀏覽器中;
瀏覽器再次發起請求,並且帶着cookie--> 服務端通過cookie認證,確認是剛才建立的會話。
代碼實現
這里使用的注解因為是代理對象,所以不用擔心單例的問題
@Autowired
HttpServletRequest httpServletRequest;
package com.example.testsession.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/session")
public class SessionController {
@Autowired
HttpServletRequest httpServletRequest;
/**
* 創建會話,並給session添加值
*
* @return
*/
@RequestMapping("/set")
@ResponseBody
public void set() {
System.out.println("----初次會話----");
// 獲得session,如果沒有,自動創建一個
HttpSession mySession = httpServletRequest.getSession();
String mySessionId = mySession.getId();
mySession.setAttribute("abc", "123");
System.out.println("mySessionId:" + mySessionId);
}
/**
* 瀏覽器通過cookie和服務端進行第二次會話
*/
@RequestMapping("/get")
@ResponseBody
public void get() {
System.out.println("----二次會話----");
// 獲得session,如果沒有,返回null
HttpSession mySession = httpServletRequest.getSession(false);
String myCookie = mySession.getId();
String vCode = (String) mySession.getAttribute("abc");
System.out.println("myCookie:" + myCookie);
System.out.println("get-s:" + vCode);
}
}
通過路徑訪問
http://localhost:8080/session/set

http://localhost:8080/session/get

