zoukankan      html  css  js  c++  java
  • 【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自动携带至请求头给服务端

  • 相关阅读:
    Can you feel my word?
    木语录
    走在风雨中
    我看平淡生活……
    Can you feel my word?
    我看平淡生活……
    留言本
    Python(七)之匿名函数lambda
    python之常用模块logging
    python(六)之面向对象
  • 原文地址:https://www.cnblogs.com/july-sunny/p/12500380.html
Copyright © 2011-2022 走看看