04.Cookie和Session
会话技术:cookie和session
1. 会话技术
一次会话包含了多次请求和响应
一次会话:浏览器第一次发送请求的时候建立连接,建立会话,直到有一方断开的时候会话结束。
作用:==共享数据==
方式:
1. 客户端会话技术:cookie 2. 服务器端会话技术:session
2. Cookie
概念:客户端会话技术,将共享的数据放到浏览器端
2.1 步骤
创建一个cookie的对象,绑定数据。
1
new Cookie(String name,String value);
发送cookie给浏览器
1
response.addCookie(Cookie cookie);
获取cookie,拿到数据
1
Cookie[] cookies = request.getCookies();
2.2 实现原理
==基于响应头set-cookie和请求头cookie实现的。==
2.3 cookie细节
2.3.1 一次是否可以发送多个cookie?
可以,在服务器端创建多个cookie对象,使用response调用多次 addCookie 方法发送给浏览器。
2.3.2 cookie在浏览器中保存多长时间?
- 默认情况下,当浏览器关闭后,cookie数据被销毁。
- 持久化存储:
- setMaxAge(秒数)
==正数:==将cookie写到磁盘中,持久化存储,并指定cookie的存活时间,时间一到不管你是否关闭了浏览器,都会清除当前cookie,如果时间没到关闭了浏览器,打开浏览器的时候,cookie还在。
==负数:==默认值,浏览器关闭,cookie失效,如果浏览器不关闭,一直都在。
==0:==删除cookie.
2.3.3 cookie中是否可以存储中文?
- tomcat 8之前,cookie中不能存储中文。tomcat8之后可以存储中文了。
- 如果tomcat8之前想要存储中文怎么办,将中文进行urlEncoding编码存储。
- tomcat8之后,可以存储中文,但是不支持特殊字符,建议使用urlEncoding进行编码存储。
2.3.4 cookie是可以共享的
是否可以控制当前cookie发送哪些请求的时候可以被使用?可以控制
在同一个tomcat中部署了多个web项目的时候,这些项目中如果想要共享cookie.
setPath(“/“);表示当前tomcat中所有的项目共享此cookie.
setPath(String path);
设置cookie的生效范围,默认情况下,路径是当前的项目的虚拟目录。
2.4.5 不同的tomcat如何共享cookie呢?
setDomain(string path),域名,一级域名。
baidu.com是一级域名。
www.baidu.com
image.baidu.com 二级域名
如果一级域名相同的情况下,那么多个tomcat可以共享cookie数据。
2.4 cookie的特点
1. 存储位置:cookie存储在浏览器端。
2. 浏览器对于单个cookie的大小是有限制的,4kb同一个域名下面的总的cookie的数量有限制(20个)
应用场景:
cookie存储的数据一般是不敏感的数据。
1.cookie可以在浏览器端存储购物车数据,登陆信息。
案例分析:
1.记录用户上一次访问我们网站的时间。
1.如果是第一次过来访问:提示:您好,欢迎首次访问
2.如果不是第一次过来访问:提示:欢迎回来,您上次访问的时间是:2019-08-30 12:22:22
2. session
服务器端的会话技术:在一次会话中多次的请求之间共享数据,将数据保存在服务器端的对象中,这个对象就是session的对象。
2.1获取HttpSession对象。
1 | request.getSession; |
2.2 session共享数据
session.getAttribute();
seesion.setAttribute();
session.removeAttribute();
session是依赖于cookie存在的。
1.当 客户端关闭后,服务器端不关闭,两次获取的session是不是同一个session:不是同一个session;
2.当客户端不关闭,服务器端关闭了,两次获取的session是同一个吗?
不是。
session的钝化:
正常关闭的时候,tomcat内存中的session数据会被保存到一个文件中。
session的活化:
正常关闭的服务器启动的时候,会先读取文件中的session数据,然后加载到内存中。
3.session什么时候被销毁:
1.服务器关闭的时候。
2.session对象调用invalidate();销毁session对象。
3.session是可以过期的。session默认存活时间30分钟。
在conf文件夹下web.xml中配置session的过期时间:
默认30分钟。