cookie和session

时间:2022-07-26
本文章向大家介绍cookie和session,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

cookie主要完成同一会话中不同请求响应间数据传输的任务。cookie是一种消息载体,是在服务器端生成的,首次会以响应报文中传输到客户端,客户端浏览器会将cookie中的内容保存到本地磁盘上,之后再向服务器发送请求时会带着cookie,从而完成多次请求响应中的消息传输问题。

cookie中消息为一组字符串组成的键值对。

使用最为广泛为两个场景为:电商网站的购物车,记住用户名与密码。

@Controller
public class CookieController {
    @RequestMapping("/add")
    @ResponseBody
    public String add(HttpServletResponse response, HttpServletRequest request){
        Cookie cookie = new Cookie("name","zyd");
        // 设置携带该cookie的路径
        cookie.setPath(request.getContextPath() + "/test");
        // 设置过期时间为1年并保存到客户端磁盘 ,默认小于0是只保存到内存的
        cookie.setMaxAge(60 * 60 * 24 * 365);
        response.addCookie(cookie);
        return "success";
    }
    @RequestMapping("/test")
    @ResponseBody
    public String test(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        StringBuilder sb = new StringBuilder();
        for(Cookie cookie : cookies){
            sb.append(cookie.getName() + " " + cookie.getValue());
        }
        return sb.toString();
    }
}

Session

与cookie相同也是一种会话跟踪技术,不过session是将会话的状态信息保存到服务器端。

服务器中会为每个会话维护一个session。同一会话一直使用一个session,不同会话使用不同的session。

为了保证上述两目标,session以下步骤运行:

1)写入session列表

session列表底层就是一个map,其key为32长度的随机串,称之为JSessionID,value为session对象的引用。首次提交请求时执行request.getSession()方法后会生成一个session对象。

2)服务器将JsessionId以cookie的方式发送给浏览器

系统会产生name = “JSESSIONID”,32位的随机串作为value 的cookie发送给浏览器。该cookie是不写到硬盘的。

3)客户端接收并发送cookie

之后的请求会带着该cookie。

4)从session列表中查找

根据发送而来的cookie中的“JSESSIONID”的值从Map中查找。

当禁用cookie后,第三步客户端再次给服务请求时不会带着jsessionID,服务器就以为该请求是新的会话,因此会在响应报文中给客户端产生并发送新的sessionid。