分析cookie session token区别
2017-11-01 本文已影响0人
eblly
github找个springMVC的例子,运行起来以供测试。
https://github.com/Cenyol/SpringMVC
修改部分代码
// 首页
@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);
}
客户端(浏览器)和服务端如何识别同一个session
猜测 通过sessionID
验证:
同样的,如果不重启服务器。清空浏览器的cookie使得发送的请求头不包含cookie,服务端会视该请求为首次请求,并返回set-cookie。
session
java代码中的session
是服务器用于存储key
为sessionID
,value
为Map的容器.
如下图:
JSESSIONID是java容器默认生成名为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是客户端存储数据的空间。
但为什么服务端可以操作cookie,客户端也可以操作cookie,这两者之间有什么关联和区别?
服务端操作cookie的方式是set-cookie,而客户端是取cookie。
在客户端首次访问服务时,请求头中没有包含cookie,这时服务端会判断用户为首次登录,记录标识并在返回的头部包含set-cookie键值。
随后客户端拿到这set-cookie并存放在cookie中,再次访问服务时,request的头部中会包cookie字段。
session ID 与token
session ID
和token
是一码事,都是用于标识会话,只不过它们的生成规则不一样。
它们通常会存储于cookie中,并会随着http请求
发送至服务端。
参考
- 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
- 会话(Cookie,Session,Token)管理知识整理(一)
- https://docs.oracle.com/javaee/6/api/index.html?javax/servlet/http/HttpSession.html