cookie与session的简单快速理解

本文旨在快速理解cookie与session的概念,而不是深挖其中技术细节,也不整无用的代码示例。
很多技术点在使用过程中,更多的是一种进阶版的黑盒,知道如何用,知道其基本原理,而无需深挖实现细节。

会话

会话是指一个终端用户与交互系统进行通讯的过程,比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。

简单的来说,我们打开csdn的网页,一次与csdn服务器的会话便开启。
我们浏览csdn的相关页面,会话便在进行中。
当我们关闭csdn网页,但浏览器尚未关闭,会话仍然没有结束。
而当我们重新打开csdn网页,会话继续进行。
当我们关闭浏览器,此时,与csdn的会话就正式的结束了。

由此来看,会话的意思就是字如其名,字面意思。
想象一下,你去服务台与服务员搭话。
假定服务员很正规,问一句答一句,莫得感情。
那么在你开始搭话,到离开服务台这段时间,就是你在于服务台的服务员进行会话。

在这个会话中,你会向服务员提问,这便是实际中前端向后端发起请求;而服务员也会对你的请求进行回应,回答你的问题。

在会话中,常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。


cookie

由于http会话是无状态的,所谓无状态,是每次请求独立;客户端和服务器之间对话产生的数据可以理解成状态,这些状态不会保存。
客户端用户每次与服务器进行请求,对于服务器来说,都是全新的。
所以服务器并不知道,请求自己的谁是谁,也不知道刚才是谁登的录,是谁付的款,这样就乱了,因为一次会话,多次请求之间是必须要建立联系的。
此时cookie应运而生。

cookie主要作用有二:

  • 一是可以存储数据
  • 二是可以作为用户的唯一标识

举个例子
cookie就像是银行和咱们之间的关系。银行不认你人,因为人会整容化妆伪装,根本不能根据你外表来判断你是谁。
所以银行发给你一个U盾(cookie),它既是你的身份标识,也存储了你的账户信息,你在进行金额操作之后,U盾会存储你的金额信息。
你在与银行进行互动时,每次都要把U盾递给银行,银行办业务,更新你的U盾数据,然后把U盾还给你。
当有一天,你和银行的关系破灭了,你便不需要这个U盾了,会话也就终止了。
又或者有一天,你把U盾弄丢了,那不好意思,银行只认U盾不认人,你完了。

以上便是对cookie的大概理解。
cookie的原理在于:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容,浏览器收到相应后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。
拥有了cookie,你的不同请求之间也就有了关联,本次请求就能使用之前请求响应的数据了。

cookie的相关特点:

  • cookie
  • 以键值对的形式存储信息在浏览器
  • 不超过4KB
  • 不能跨域,当前及其父级域名可以取值
  • cookie可以设置有效期
  • cookie可以设置path,其是一个路由,/就是当前域名下都能访问到

cookie与session的简单快速理解_第1张图片


session

session也有会话之意,但session和上面的会话概念绝不是一回事,所以不要理解错了。
session和cookie属于同一层级。

session的出现是因为cookie存在着某些问题,针对这些问题,便有了session。

cookie的问题:

  • cookie在用户(浏览器)手里,这极其的不安全
  • cookie能够存储的数据量太小了,上面说到只有4kb,这够干嘛?

针对这两个问题,session出现了。
session存放在服务器端,用于存储会话中产生的有用的数据。

举个形象的例子:
session就是你去超市,超市为用户们准备的储物柜。
这个储物柜可以存放你买的商品,而且可以重复使用。
你每次去买东西,买好了就放到储物柜里。
不过问题还是存在,就是超市的储物柜是无法识别你是谁的,它怎么保证你的储物柜只归你使用呢?
就和超市一样,当你第一次进超市,你什么都没有,然后去和储物柜互动,储物柜便会给你一张密码纸。
只要持有这张纸,就说明你拥有这个柜子的使用权。
这张纸就是cookie。
于是,我们可以总结一下,session就是服务器为用户准备的储物柜,而cookie就是服务器来识别用户和储物柜关系的那张密码纸,当然,cookie上记录了用户所使用的储物柜编号的编码形式。
(这里也能够看得到,session中也是使用到了cookie的)
cookie与session的简单快速理解_第2张图片


session和cookie的区别与联系

联系的话,上面其实我们也都说过,两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过期与否可以在cookie生成的时候设置进去。
它们都是会话跟踪技术。

区别:

  • cookie数据存放在客户的浏览器上,session数据放在服务器上
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
  • 单个cookie的大小为4KB,而session要远远不止,所以存放的数据量差别很大

参考博客

ava Web(三) 会话机制,Cookie和Session详解 https://www.cnblogs.com/whgk/p/6422391.html
cookie和session https://www.cnblogs.com/changxin7/p/11608985.html(图片来源)

你可能感兴趣的:(java基础学习,java,session,cookie,http)