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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 地下城游戏

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下...

    你的益达
  • 三角形最小路径和

    相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。

    你的益达
  • 最小区间

    你有 k 个升序排列的整数数组。找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中。

    你的益达
  • Cookie、Session、Token那点事儿

    前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie、session、token这仨哥们的时候,很多开发者说法不...

    java思维导图
  • 各浏览器Cookie大小、个数限制

    一、浏览器允许每个域名所包含的cookie数:   Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也...

    小柒2012
  • session与cookie的区别

    (4)设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。

    葆宁
  • 详解Flask中session与cookie的用法

    做过爬虫的朋友相信对 session 和 cookie 这两个东西非常的熟悉了,简单点说 cookie 是客户端用来标识用户信息的,session 是一种会话机...

    Python编程与实战
  • cookie方法封装及cookie缺点分析

    用户1741436
  • 第47次文章:cookie&session

    一次会话中包含多次请求和响应。 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止。

    鹏-程-万-里
  • Python爬虫番外篇之关于登录

    常见的登录方式有以下两种: 查看登录页面,csrf,cookie;授权;cookie 直接发送post请求,获取cookie 上面只是简单的描述,下面是详细的针...

    coders

扫码关注云+社区

领取腾讯云代金券