Cookie和Session

一、Cookie

  • 什么是Cookie?
    cookie是一种浏览器存储服务器数据的机制。因为安全原因其实浏览器是不允许服务器随便传输数据信息到远程客户端的,但是一些情景写下,浏览器又需要将一些身份信息存储的远程客户端,所以就出现了cookie。
  • 浏览器中的cookie是怎么来的?
    当获取http响应时,有一个set-cookie字段,服务器会将需要客户端存储的cookie以这种方式传递给服务器。
  • 浏览器中的cookie怎么发送给服务器?
    在http请求中有cookie字段,cookie会被存放在http请求中的cookie字段发送给服务器。
  • cookie存在哪里?
    cookie存在客户端的磁盘上,每个域名的cookie都是单独存储的,保证了cookie的独立性

二、Session

  • 什么是session?
    session是服务器存储客户端信息的一种存储机制。Session也叫会话,它用来记录一次客户端和服务器之间的有上下文的交互。Session向服务器标识了http请求的账户。当一个账号登录上系统时,系统会创建一个sessionid与这个账户绑定形成一个键值对,并且将sessionid返回给客户端,之后的每次交互,客户端都会携带这个sessionid信息,服务器就能根据sessionid识别出这个请求是哪个用户发的,从而锁定用户。
  • session在servlet中的实现
    因为session只是一种机制,所以各种语言框架都有各自对这个机制的实现方式,servlet中就是HttpSession这个实现方式。
    1. 首先要通过HttpRequest对象的getSession方法去获取http请求中的sessionId,sessionid是以cookie的形式存放在http请求中的。
      • 如果请求的cookie中没有sessionid,则自动创建一个新的sessionid,并且将这个id赋值到响应的set-cookie字段中(getSession(false)如果参数是false,则不会创建,直接返回null),然后
        返回一个HttpSession对象,这个对象就是和这个sessionid绑定了的。
      • 这个HttpSession对象还可以存键值对,setAttribute(key,value)方法在HttpSession中存储键值对,这个HttpSession中的键值对才将账号信息和一个键值绑定起来。

      综上所述,Servlet中的Session实现是将sessionid和一个httpSession对象绑定,然后这个httpSession对象再存储账号信息,从而间接实现的sessionid和账号的绑定。

三、Session和Cookie的区别

  • session时服务器的存储机制,Cookie是浏览器的存储机制
  • Cookie是http协议的一部分,session和http协议无关
  • Cookie可以脱离session单独使用,还能获取登录次数,登录时间什么的。
    Session也可以脱离cookie单独使用,比如使用手机app进行登录的时候,此时是没有cookie的,cookie和浏览器是强相关的,手机app不一定是浏览器。

你可能感兴趣的:(servlet,http)