【JavaWeb】 Cookie和Session

  Session和Cookie出现的原因: 

    由于Http是无状态的协议,会话之间没有任何关联,也就是上一次会话和下一次会话没有任何关联,因此出现了会话技术Cookie和Session 

  下面分别从CookieSession两方面来讨论:

  Cookie:

    Cookie是客户端的会话技术,当浏览器访问服务端时,服务端可以通过将Cookie信息存放到响应头Set-Cookie字段中,随着响应报文发送给浏览器

  浏览器看到Set-Cookie字段后,会将该信息保存起来,下次请求时,将Cookie自动放到请求头的Cookie字段发送给服务器端,服务端解析Cookie信息可以

  获得相关的信息,例如保存登录状态等等

  以Java为例:

    浏览器访问服务端的接口

  /**
     * Cookie测试
     * @param httpServletResponse
     * @return
     */
    @GetMapping("/testCookie")
    public Result testCookie(HttpServletResponse httpServletResponse){
        //如何创建Cookie
        Cookie cookie = new Cookie("test","xxxxx");
        //如何将Cookie返回给客户端--通过Response响应给浏览器
        httpServletResponse.addCookie(cookie);
        return Result.success("success");

    }

    服务端响应给浏览器的信息如图:

     下次浏览器再次与服务端通信的时候,会将次Cookie存放在请求头的Cookie字段,一起发送给服务端,如图

     Cookie的相关参数

     Cookie由于以文本形式保存到浏览器,因此不太安全,而且每个浏览器存放Cookie的数量和大小都有区别,因此出现了下面的服务端会话技术Session

  Session:

    Session存储在服务端,客户端只存储了SessionId,服务端将一次会话的重要信息存放在Session中,浏览器只记录SessionId,一个SessionId对象一次会话请求

  同样的,服务端设置完Session之后,Session会随着响应一起发送给客户端,Session通过响应头中的Set-Cookie字段,数据格式以JSessionId=xxx

  的方式来返回给浏览器

    下面以Java代码为例:

    /**
     * Session测试
     * @param httpServletRequest
     * @return
     */
    @GetMapping("/testSession")
    public Result testSession(HttpServletRequest httpServletRequest){
        //如何创建Session
        HttpSession session = httpServletRequest.getSession();
        session.setAttribute("testSession",222222);
        //如何将Session返回给客户端--设置完Sesison的key-value后,服务端会生成SesisonId来记录本次会话信息,通过Response响应给浏览器
        return Result.success("success");

    }

    服务端响应头中Set-Cookie字段来传递Session,生成一个唯一Id来记录本次会话

     下次会话时,浏览器将自动将SessionId携带至请求头的Cookie字段来一起请求服务端,如图

     Session即使我关闭浏览器,再次打开浏览器请求该站点时,值要Session没过期(默认30分钟),也会将该Session自动携带至请求头给服务端

原文地址:https://www.cnblogs.com/july-sunny/p/12500380.html