「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。
有人会想,什么是Cookie,什么是Session,这两个词是什么意思,为什么要叫Cookie,为什么要起这个名字。
我们没必要纠结那些,因为这些东西都是外国人发明的,所以命名权在他们手中(传说Cookie 的名称起源有个小故事)。
所以对于我们来说,我们只要知道,Cookie 和Session 在计算机中代表什么,起什么作用,我们只要记住他们的功能就好了。
Cookie 和Session
Cookie 的中文翻译是“小甜饼”,与之常常一同出现的概念是Session,Session 被翻译成“会话”。我们常常将两个概念进行对比理解。
首先我们对比二者,可以“望文生义”,进行字面理解的抽象复盘找技巧进行记忆。对于Cookie(小甜饼)可以想,小甜饼是“我给你”,而Session(会话)是两人建立了一次交谈。对于计算机的概念,也是这个过程。
会话
最开始理解“会话”的概念。在日常生活中,两人交流,问问工资多少啊,这是一个会话。
在Web 中,可以这样理解一个“会话”。如:用户打开了一个浏览器,点击了很多超链接(这是一个动作),访问多个Web 资源,然后关闭浏览器,这个过程可以成为“会话”。
有状态会话
举例来说:你能怎么证明你是【松林一中】的学生。
你说你交了学费,学校不认。但是你说你有发票,这个就是一个证明。但是发票是在你手中的,可以造-假,所以发票也需要学校进行认证。其实每个人的信息,在学校是有备案的。这份数据是存在学校本身的,即使出错了,也是学校的责任。所以这是一个解决方案。
在现实生活中,对于学校认证这种情况,我们的发票,没必要作-假,即使作-假比较逼真,因为学校有备案数据,所以也不是有意义的事情,所以也可以作为一个“不是那么安全”的认证方法。
在java 中,万物皆对象。对于这种情况,一个对象是你,一个对象是松林一中。
- 发票,松林一中给你的,说明你是学校的学生。
- 学校备案数据,学校标记你是本校学生。
我们这时候要想,在Web 开发中,对于一个网站,怎么证明你来过?比如说我登陆淘宝之后,打开一个又一个页面,在第一个页面登陆过了,但是在其他页面并没有登陆的操作,为什么我还是登陆状态。
在这里,我们要知道,互联网都是人的思维,对于Web 开发中,和上面的生活中的举例相似。我们在登陆某个网站的时候,浏览器相当于客户端,服务器就是服务端。问题在于,客户端如何像服务端证明我来过了。解决方案:
- 服务端给客户端一个“信件”。客户端下次访问服务端的时候带上信件就可以了。在计算机中,这个“信件”就被称作Cookie(小甜饼,服务端给客户端,之后客户端每次访问的时候,都带上这个)。
- 服务器登记【你来过了】,下次你来的时候我匹配你。这就是Session 的概念。
所以什么叫“有状态会话”,举例:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话。我们想知道这个同学曾经来过,需要用一些手段才行,记录一些东西。(如果不写代码,理解还是比较慢的)
保存会话的两种技术
- cookie
是一种客户端技术。
我们想,服务端如何把Cookie 发给客户端,这个只能通过Servlet 的响应(Response);而客户端如何把它带到服务器上,只能通过请求(Request)。
- session Session 是服务器登记“你来过”,是一种服务端技术。
利用这种技术,可以保存用户的会话信息。我们可以把用户的信息或者数据放到Session 中。
之前我们有介绍过,把信息放到一个对象中,让别的程序去取的东西是ServletContext,ServletContext 可以放东西,如:
context.setAttribute("userName", userName);
其实Servlet 中的Request 也有上述功能,但是之前没讲过,之后就会进行讲解。
本篇文章介绍了Cookie 和Session 的概念,后续文章会使用代码,根据应用场景,进行具体的介绍。