github找個(gè)springMVC的例子解孙,運(yùn)行起來(lái)以供測(cè)試顾瞪。
https://github.com/Cenyol/SpringMVC
修改部分代碼
// 首頁(yè)
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
ServletRequestAttributes attr = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
HttpServletRequest req = attr.getRequest();
HttpServletResponse response = attr.getResponse();
HttpSession session = req.getSession();
Enumeration enumerations = session.getAttributeNames();
String sessionId = session.getId();
String sessValue = (String)session.getAttribute("sess");
session.setAttribute("sess","session123456");
ServletContext servletContext = session.getServletContext();
Cookie[] cookies = req.getCookies();
Cookie cookie = new Cookie("aaaa", "bbb");
response.addCookie(cookie);
}
客戶(hù)端(瀏覽器)和服務(wù)端如何識(shí)別同一個(gè)session
猜測(cè) 通過(guò)sessionID
驗(yàn)證:
同樣的松逊,如果不重啟服務(wù)器背伴。清空瀏覽器的cookie使得發(fā)送的請(qǐng)求頭不包含cookie裁赠,服務(wù)端會(huì)視該請(qǐng)求為首次請(qǐng)求闯传,并返回set-cookie谨朝。
session
java代碼中的session
是服務(wù)器用于存儲(chǔ)key
為sessionID
,value
為Map的容器.
如下圖:
JSESSIONID是java容器默認(rèn)生成名為JSESSIONID
的session id。
Examples of the names that some programming languages use when naming their cookie include JSESSIONID (Java EE), PHPSESSID (PHP), and ASPSESSIONID (Microsoft ASP).
cookie
cookie是客戶(hù)端存儲(chǔ)數(shù)據(jù)的空間甥绿。
但為什么服務(wù)端可以操作cookie字币,客戶(hù)端也可以操作cookie,這兩者之間有什么關(guān)聯(lián)和區(qū)別共缕?
服務(wù)端操作cookie的方式是set-cookie纬朝,而客戶(hù)端是取cookie。
在客戶(hù)端首次訪(fǎng)問(wèn)服務(wù)時(shí)骄呼,請(qǐng)求頭中沒(méi)有包含cookie共苛,這時(shí)服務(wù)端會(huì)判斷用戶(hù)為首次登錄,記錄標(biāo)識(shí)并在返回的頭部包含set-cookie鍵值蜓萄。
隨后客戶(hù)端拿到這set-cookie并存放在cookie中隅茎,再次訪(fǎng)問(wèn)服務(wù)時(shí),request的頭部中會(huì)包c(diǎn)ookie字段嫉沽。
session ID 與token
session ID
和token
是一碼事辟犀,都是用于標(biāo)識(shí)會(huì)話(huà),只不過(guò)它們的生成規(guī)則不一樣绸硕。
它們通常會(huì)存儲(chǔ)于cookie中堂竟,并會(huì)隨著http請(qǐng)求
發(fā)送至服務(wù)端。
參考
- https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#innerlink_set-cookie
- https://en.wikipedia.org/wiki/Session_(computer_science)#Web_server_session_management
- https://en.wikipedia.org/wiki/Session_ID
- 會(huì)話(huà)(Cookie,Session,Token)管理知識(shí)整理(一)
- https://docs.oracle.com/javaee/6/api/index.html?javax/servlet/http/HttpSession.html