分析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

验证:

image.png image.png image.png

同样的,如果不重启服务器。清空浏览器的cookie使得发送的请求头不包含cookie,服务端会视该请求为首次请求,并返回set-cookie。

session

java代码中的session是服务器用于存储keysessionID,value为Map的容器.
如下图:

屏幕快照 2017-11-01 10.42.13.png

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 IDtoken是一码事,都是用于标识会话,只不过它们的生成规则不一样。
它们通常会存储于cookie中,并会随着http请求发送至服务端。

参考

上一篇下一篇

猜你喜欢

热点阅读