概述
- 从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就会被建立了
- 会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着
- 浏览器和服务器就可以继续使用该会话进行请求发送和响应,上述的整个过程被称之为会话
会话技术
概念
会话:一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
功能
在一次会话的范围内的多次请求间,共享数据
方式
1. 客户端会话技术:Cookie
2. 服务器端会话技术:Session
Cookie
概念
客户端会话技术,将数据保存到客户端
步骤
创建Cookie对象,绑定数据
* new Cookie(String name, String value)
发送Cookie对象
* response.addCookie(Cookie cookie)
获取Cookie,拿到数据
* Cookie[] request.getCookies()
特性
Cookie可以创建发送多个cookie
Cookie默认情况下 当浏览器被关闭后,Cookie就会被销毁
可以设置Cookie的生命周期,让它持久化存储 setMaxAge()秒
传入正数 将Cookie数据写到硬盘的文件中。持久化存储
传入负 数默认值
传入0 删除cookie信息
注意
cookie在tomcat8之前不能存入中文,在tomcat8之后可以存中文
cookie存储数据在客户端浏览器(不安全)
浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
cookie一般用于存出少量的不太敏感的数据
Session
概述
服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中 HttpSession
获取HttpSession对象:
HttpSession session = request.getSession();
使用HttpSession对象:
getAttribute(String name)
setAttribute(String name, Object value)
removeAttribute(String name)
session的持久化
/*
session的原理就是cookie
通过在请求中 加一个cookie jsessionid = xxxxx
只要 id一样 那么session对象就是一个
但是 cookie中jsessionid默认关闭浏览器之后,就没有了
所以session没有做到持久化
持久化:
将名字叫jsessionid的cookie 做一个持久化功能, 对应的session就持久化了
*/
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);
sessionte特点
- session用于存储一次会话的多次请求的数据,存在服务器端
- session可以存储任意类型,任意大小的数据
Cookie和Session不同点
- session存储数据在服务器端,Cookie在客户端
- session没有数据大小限制,Cookie有
- session数据安全,Cookie相对于不安全