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

Cookie、Session

什么是会话?

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

能够用cookie或者session保存会话中产生的数据数组

Cookie的工做原理

image
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[] cookie = request.getCookies();
// 获取请求中携带的全部cookie组成的cookie对象数组,若是请求中没有携带任何cookie,调用该方法会返回null。

4.删除浏览器中的Cookiesession

// cookie的API中没有提供直接删除cookie的方法,能够经过别的方式间接删除cookie
// 删除名称为cart的cookie:能够向浏览器再发送一个同名的cookie(即名称也叫作cart),并设置cookie的最大生存时间为零,因为浏览器是根据cookie的名字来区分cookie,若是先后两次向浏览器发送同名的cookie,后发送的cookie会覆盖以前发送的cookie。然后发送的cookie设置了生存时间为零,所以浏览器收到后也会当即删除!

image
5.Cookie的经常使用方法:并发

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

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

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

示例:
image3d


Session原理及应用

Session的工做原理

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

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中获取到商品信息
image

相关文章
相关标签/搜索