小白对cookie,session基础了解---

雾凇高阶
• 阅读 2730

Cookie、Session

什么是会话?

浏览器在请求访问服务器开始,一直到访问浏览器结束,浏览器关闭为止,这期间浏览器和服务器之间产生的所有请求和响应加在一起,就称为浏览器和服务器之间的一次会话。
在一次会话中往往会产生一些数据,而这些数据需要我们保存起来,例:
*比如在没有登录时,将商品记载到购物车,其实就是将商品信息存入到了coocie或者session中。

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

Cookie的工作原理

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

Cookie中API的应用

1.创建Cookie对象

Cookie cookie = new Cookie(String name,Stringvalue);
// 创建cookie的同时需要指定cookie的名字和cookie要保存的值
// Cookie的名字一旦指定后,就无法修改!

2.将Cookie添加到response响应中

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

3.获取请求中的所有Cookie对象组成的数组

Cookie[] cookie = request.getCookies();
// 获取请求中携带的所有cookie组成的cookie对象数组,如果请求中没有携带任何cookie,调用该方法会返回null。

4.删除浏览器中的Cookie

// cookie的API中没有提供直接删除cookie的方法,可以通过别的方式间接删除cookie
// 删除名称为cart的cookie:可以向浏览器再发送一个同名的cookie(即名称也叫做cart),并设置cookie的最大生存时间为零,由于浏览器是根据cookie的名字来区分cookie,如果前后两次向浏览器发送同名的cookie,后发送的cookie会覆盖之前发送的cookie。而后发送的cookie设置了生存时间为零,因此浏览器收到后也会立即删除!

小白对cookie,session基础了解---
5.Cookie的常用方法:

cookie.getName(); // 获取cookie的名字
cookie.getValue(); // 获取cookie中保存的值
cookie.setValue(); // 设置/修改cookie中保存的值(没有setName方法,因为cookie的名字无法修改)
cookie.setMaxAge(); //设置cookie的最大生存时间(如果不设置,cookie默认在一次会话结束时销毁!)

6.设置Cookie最大的生存时间(SetMaxAge):

cookie。setMaxAge(60)  //单位为秒

示例:
小白对cookie,session基础了解---


Session原理及应用

Session的工作原理

小白对cookie,session基础了解---
1:Session是将会话中的产生的数据保存在服务器端,属于服务器端技术;
2:Session是一个域对象,Seesion中也保存了一个map集合,往Session中存数据,其实就是将数据保存到Session指定map集合中;
3:通过session.setAttribute()方法,可以将数据存入到Session中,通过session.getAttribute()方法可以将数据从session中取出来;

Session是一个域对象

获取session对象:

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

Session是一个域对象,在session中也保存了一个map集合,并且sess中也提供了存取数据的方法,如下:

session.setAttribute(String attrName,Object attrValue);
//往session域中添加一个域属性,属性名必须为字符串类型,属性值可以为任意类型
session。setAttribute(String attrName);
//根据属性名可以获取域中的属性值,返回值是一个Object类型

Session域对象的三大特性:

(1)生命周期:

创建session:
第一次调用request.getSession()方法时,会创建一个session对象。(当浏览器在服务器端没有对应的session时,调用request.getSession()方法,服务器会创建一个session对象)
销毁session:
1.超时销毁
默认情况下,当超过30分钟没有访问session时,session就会超时销毁(30分钟是默认时间,可以修改);
2.自杀:
调用session的invalidate方法时,会立即销毁session;
3.意外身亡:
1)当服务器非正常关闭时(硬件损坏,断电,内存溢出等导致服务器非正常关闭),session会随着服务器的关闭而销毁;
2)当服务器正常关闭,在关闭之前,服务器会将内部的session对象序列化保存到服务器的work目录下,变为一个文件。这个过程叫做session的钝化(序列化);再次将服务器启动起来,钝化着的session会再次回到服务器,变为服务中的对象,这个过程叫做session的活化(反序列化);

(2)作用范围:

在一次会话范围内(获取到的都是同一个session对象)

(3)主要功能:

在整个会话范围内实现数据的共享


总结 两者的区别

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

Cookie的特点:

1.Cookie是将会话中产生的数据存入到浏览器客户端,属于客户端技术(JS可以访问cookie)
2.Cookie是将数据保存到浏览器客户端,容易随着用户的操作导致cookie丢失或被窃取,因此cookie中保存的数据不太稳定,也不太安全
3.cookie中数据存在浏览器中,对服务器端没有太大影响,可以将数据保存很长时间
4.浏览器对cookie的大小和个数都有限制,一般每个站点给浏览器发送的cookie不超过20个,每个cookie大小不超过1KB

总结:cookie中适合存需要长时间保存的,对安全性要求不高的数据;

Session的特点:

1.Session是将会话产生的内容存入到服务器端,属于服务器端技术
2.session将数据存入到服务器端的session对象中,相对来说更加安全,稳定。不容易随着用户的操作而导致session中数据丢失
3.session是服务器端的对象,在并发量较高的时候,每一个浏览器客户端在服务端都要对应一个session对象,占用服务器的内存空间,影响效率

总结:session中适合存储对安全性要求较高,但不需要长时间保存的数据;

注意:cookie中保存中文数据的问题,Tomcat8.5及8.5以后的版本中已经解决了该问题!

注意:获取不到之前的session的问题

将商品保存到session中后,关闭浏览器再打开浏览器,访问服务器,此时获取不到之前的session。因为session是基于Cookie工作的。

在服务器创建一个session后,会为session分配一个独一无二的编号,称之为session的id,在此次响应时,服务器会将session的id以一个名称为JSESSIONID的cookie发送给浏览器保存到浏览器内部。

由于保存sessionid的cookie默认是会话级别的cookie,在浏览器关闭后,cookie会跟着销毁,sessionid也丢失了。因此下次访问服务器,没有session的id就获取不到之前的session。也获取不到session中的商品信息

解决方法:我们可以创建一个名称为JSESSIONID的cookie,其中保存session的ID,并设置cookie的最大存活时间,让cookie保存到硬盘上(即使浏览器关闭,cookie也不会销毁),这样下次访问服务器时,还可以将sessionid带给服务器,服务器可以通过sessionid获取到之前的session。 从session中获取到商品信息
小白对cookie,session基础了解---

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