前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cookie和session

cookie和session

作者头像
你的益达
发布2020-10-15 10:30:29
5260
发布2020-10-15 10:30:29
举报

Cookie

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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cookie
  • Session
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档