cookie和session 的简介及区别

算法流沙
• 阅读 2022
一、会话

什么是会话呢???
当浏览器发送请求访问服务器开始,一直到访问服务器结束,浏览器关闭为止,这期间浏览器和服务器之间产生的所有请求和响应加在一起,就称之为浏览器和服务器之间的一次会话
在一次会话中往往会产生一些数据,而这些数据往往是需要我们保存起来的。

那么如何保存会话中产生的数据呢?

!!可以使用cookie或session保存会话中产生的数据。

二、cookie

cookie的工作原理

(1)Cookie是将会话中产生的数据保存在浏览器客户端,是客户端技术
(2)Cookie是基于两个头进行工作的: 分别是Set-Cookie响应头Cookie请求头:
服务器在响应中给浏览器发送Cookie时,是通过Set-Cookie响应头将cookie从服务器端发送给客户端浏览器,让浏览器保存到内部;而浏览器内部一旦保存了cookie,以后浏览器每次访问服务器时,都会通过cookie请求头,将cookie信息从浏览器再带回服务器端,如果服务器端需要,可以获取请求中的cookie,从cookie中获取保存的数据,从而实现某些功能。

cookie的API及应用

1、创建Cookie对象
`Cookie c = new Cookie(String name, String value);
// 创建Cookie的同时需要制定Cookie的名字 以及 cookie中要保存的值(数据)`

2、将Cookie添加到response响应中
`response.addCookie( Cookie c );
// 将Cookie添加到response响应中, 由服务器负责将cookie信息发送给浏览器, 再由浏览器保存到内部
// 可以多次调用该方法, 添加一个以上的cookie`

3、获取请求中的所有cookie对象组成的数组
`Cookie[] cs = request.getCookies();
// 获取请求中携带的所有cookie组成的cookie对象数组;
// 如果请求中没有携带任何cookie, 调用该方法会返回null值。`
4、删除浏览器中的Cookie
在cookie的API中没有提供直接将cookie删除的方法, 可以通过别的方式间接删除cookie
代码示例:删除名称为cart的cookie: 可以向浏览器再发送一个同名的cookie(即名称也叫cart),并设置cookie的最大生存时间为零,由于浏览器是根据cookie的名字来区分cookie,如果前后两次向浏览器发送同名的cookie,后发送的cookie会覆盖之前发送的cookie,而后发送的cookie也设置了生存时间为零,因此浏览器收到后也会立即删除!
`//创建一个名称为cart的cookie
Cookie c = new Cookie( "cart" , "" );
//设置cookie的最大生存时间为零
c.setMaxAge( 0 );
//将cookie添加到响应中,发送给浏览器
response.addCookie( c );`
5、Cookie的常用方法
`cookie.getName() //获取cookie的名字
cookie.getValue() //获取cookie中保存的值
cookie.setValue() //设置/修改cookie中保存的值(没有setName方法,因为cookie的名字无法修改)
cookie.setMaxAge() //设置cookie的最大生存时间`

三、session

session的工作原理
(1)session保存在服务器端,属于服务器端技术
(2)session是一个域对象,session中保存了一个map集合,往session中存数据,其实就是将数据保存到session的map集合中
(3)通过session.setAttribute方法可以将数据保存到session对象map集合中,通过session.getAttribute方法可以将数据从session中取出来。

session作为域对象使用

Session是一个域对象,因此session中也提供了存取数据的方法。
session.setAttribute(String attrName, Object attrValue);
//往session域中添加一个域属性, 属性名只能是字符串, 属性值可以是任意类型
session.getAttribute(String attrName);
//根据属性名获取session域中的属性值, 返回值是一个Object类型

如何获取session对象:
HttpSession session = request.getSession(); // 获取一个session对象, 如果在服务器内部有当前浏览器对应的session对象,则直接返回该session对象; 如果在服务器内部没有对应session, 则会创建一个新的session对象再返回。

Session域对象的三大特征:
(1)生命周期:
创建session: 在第一次调用request.getSession()方法时, 会创建一个session对象(当客户端在服务器端没有对应的session时, 调用request.getSession方法会让创建一个session对象并返回)
销毁session:
a)超时销毁: 默认情况下, 当超过30分钟没有访问session, session就会超时销毁(30分钟是默认时间,可以修改,但不推荐修改)
b)自杀: 调用session的invalidate方法, 会立即销毁session
c)意外身亡: 当服务器非正常关闭时(断电/硬件损坏/内存溢出等导致服务器意外关闭), session会随着服务器的关闭而销毁;
当服务器正常关闭, 在关闭之前, 服务器会将内部的session对象序列化保存到服务器的work目录下, 变为一个文件, 这个过程叫做session的序列化(也叫做钝化)。再次启动服务器, 钝化着的session会再次回到服务器,变为服务器中的session对象,这个过程叫做session的反序列化(活化)
(2)作用范围:(同一个客户端)在一次会话中,获取到的都是同一个session对象
(3)主要功能:在一次会话范围内实现数据的共享

cookie和session的区别

Session和cookie都属于会话技术, 都可以用于保存会话中产生的数据, 但由于Cookie和Session的工作原理和特点不同, 因此两者的应用场景也不一样。

cookie的特点

1、cookie是将会话中产生的数据保存在浏览器客户端, 是客户端技术

2、cookie是将数据保存在客户端浏览器,容易随着用户的操作导致cookie丢失或者被窃取,因此cookie中保存的数据不太稳定,也不太安全。

但cookie将数据保存在客户端,对服务器端没有太多影响,可以将数据保存很长时间。

因此cookie中适合存储需要长时间保存的数据,但对安全性要求不高。

3、浏览器对cookie的大小和个数都有限制,一般推荐每一个站点给浏览器发送的cookie数量不超过20个,每一个cookie的大小不超过1kb。

Cookie的应用:实现购物车、记住用户名、30天内自动登录等。

session的特点

1、session是将会话中产生的数据保存在服务器端,是服务器端技术

2、session将数据存在服务器端的session对象中,相对更加的安全,而且更加稳定。不容易随着用户的操作而导致session中的数据丢失或者是被窃取。

但session是服务器端的对象,在并发量较高时每一个浏览器客户端在服务器端都要对应一个session对象,占用服务器的内存空间,影响效率。

因此session中适合存储对安全性要求较高,但不需要长时间保存的数据。

Session的应用:保存登录状态、保存验证码

点赞
收藏
评论区
推荐文章
灯灯灯灯 灯灯灯灯
4年前
一篇文带你了解什么是一片Cookie走天下
概念Cookie是服务端发送到用户浏览器并且保存到本地的一小块数据,它会在浏览器下次向同一服务器发起请求时,被携带到服务器上。为什么有cookie因为HTTP协议是无状态的(HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。),即服务器不知道用户上一次做了什么,
Wesley13 Wesley13
4年前
Java Web学习总结(11)——Session使用示例教程
一、Session简单介绍  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中
Stella981 Stella981
4年前
Django用户认证
COOKIE与SESSION概念cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这
Stella981 Stella981
4年前
Django中的session的使用
一、Session的概念cookie是在浏览器端保存键值对数据,而session是在服务器端保存键值对数据session的使用依赖cookie:在使用Session后,会在Cookie中存储一个sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到sess
Stella981 Stella981
4年前
JSP中的Cookie和Session
1\.cookie1.1什么是cookie      浏览器访问服务器时,服务器会将一些数据(少量的,4KB左右)以setcookie消息头的方式发送给浏览器。浏览器会将这些数据保存下来(内存、或者以文件的形式保存在硬盘上)。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送过来。
Stella981 Stella981
4年前
Django组件——cookie与session
Django组件——cookie与session<fontcolor00bff一、会话跟踪技术</font<fontcolorff7f501、什么是会话跟踪技术</font先了解一下什么是会话。可以把
Stella981 Stella981
4年前
Cookie学习笔记
会话的概念:打开浏览器,输入正确的URL访问服务器,期间浏览器向服务器请求资源,服务器给予资源响应,最后关闭浏览器,客户端和浏览器的连接断开。这一过程可理解为会话。Cookie入门:Cookie是在服务器创建,保存在客户端。Cookie会在客户端保存一些用户的信心,比如浏览信息。在客户端没有删除一个站点的Cookie情况下,在下一次在访问该站点
Stella981 Stella981
4年前
Django_cookie和session
cookie和session1.cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次
Stella981 Stella981
4年前
Django组件——Cookie与session相关
一,会话跟踪技术1什么是会话跟踪技术我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程中,你会向10086发出多个请求,那
Stella981 Stella981
4年前
SpringBoot整合SpringSeesion实现共享Session方案
Http协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例Session共享问题随之而来。下面假设我们使用Nginx来实现负载均衡横向扩节点:!(https://oscimg
Easter79 Easter79
4年前
SpringBoot整合SpringSeesion实现共享Session方案
Http协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例Session共享问题随之而来。下面假设我们使用Nginx来实现负载均衡横向扩节点:!(https://oscimg