http是无状态协议,它不对之前发生过的请求和响应进行管理。也就是说,无法根据之前的状态进行本次的请求处理,哪怕你刚刚才访问过这个服务器,可当你下一秒再访问时,服务器已经忘了你是谁了。假设要求登陆认证的web页面本身无法进行状态的管理(不记录已登陆的状态),那么每次跳转页面就要再次登陆,或者要在每次请求报文中附加参数来管理登录状态。
于是,引入了cookie技术。Cookie机制会根据服务器段发送的响应报文中的一个Set-Cookie的首部字段信息通知客户端保存cookie。当下一次客户端再向服务器发送请求时,客户端会自动在请求报文中加入一个cookie首部字段后发送,首部字段值为键值对的形式。
一段通俗的解释过程:
服务器为了区别用户,给每个首次访问网站的用户(请求头里没有cookie或者cookie里没有SessionID,SessionID即为cookie首部中的值)设置一个SessionID,同时在服务器端保存一个带有SessionID的文件,来保存用户的一些信息。
因此,两者的区别在于:
1.session是一种机制,cookie只是为了实现这个机制的一部分。
2.cookie存储在客户端,也就是浏览器;SessionID以及其他的一些用户信息存储在服务器。
3.浏览器在访问网页时会把该服务器给你的SessionID放到cookie头中去请求,这是所有浏览器最基本的功能。
图解HTTP中的一个例子: