目录
什么是会话
- 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在 一次会话中可以包含多次请求和响应。
- 从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了
- 会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着
- 浏览器和服务器就可以继续使用该会话进行请求发送和响应,上述的整个过程就被称之为会话。
- 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
- 服务器会收到多个请求,这多个请求可能来自多个浏览器,如上图中的6个请求来自3个浏览器
- 服务器需要用来识别请求是否来自同一个浏览器
- 服务器用来识别浏览器的过程,这个过程就是会话跟踪
- 服务器识别浏览器后就可以在同一个会话中多次请求之间来共享数据
会话跟踪技术的实现方式有:
- 客户端会话跟踪技术:Cookie
- 服务端会话跟踪技术:Session
这两个技术都可以实现会话跟踪,它们之间最大的区别:Cookie是存储在浏览器端而Session是存储在服务器端
什么是Cookie
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携Cookie数据进行访问。
- Cookie的基本使用
Cookie的操作主要分两大类,本别是发送Cookie和获取Cookie
发送Cookie
- 创建Cookie对象,并设置数据
Cookie cookie = new Cookie("key","value");
- 发送Cookie到客户端:使用response对象
response.addCookie(cookie);
获取Cookie
- 获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
- 遍历数组,获取每一个Cookie对象:for使用Cookie对象方法获取数据
cookie.getName();
cookie.getValue();
Cookie的存活时间
- 设置Cookie存活时间
//1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
//2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
//3.零:删除对应Cookie
setMaxAge(int seconds)
- Cookie不能直接存储中文
- 1.在AServlet中对中文进行URL编码,采用URLEncoder.encode(),将编码后的值存入Cookie中
- 2.在BServlet中获取Cookie中的值,获取的值为URL编码后的值
- 3.将获取的值在进行URL解码,采用URLDecoder.decode(),就可以获取到对应的中文值
Session
Session:服务端会话跟踪技术:将数据保存到服务端。
- Session是存储在服务端而Cookie是存储在客户端
- 存储在客户端的数据容易被窃取和截获,存在很多不安全的因素
- 存储在服务端的数据相比于客户端来说就更安全
Session的基本使用
- 获取Session对象,使用的是request对象
HttpSession session = request.getSession();
- Session对象提供的功能
存储数据到 session 域中
void setAttribute(String name, Object o)
- 存储数据到 session 域中
Object getAttribute(String name)
- 根据 key,删除该键值对
void removeAttribute(String name)
Session钝化与活化
- 钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
- 活化:再次启动服务器后,从文件中加载数据到Session中数据加载到Session中后,路径中的SESSIONS.ser文件会被删除掉
- session数据存储在服务端,服务器重启后,session数据会被保存
- 浏览器被关闭启动后,重新建立的连接就已经是一个全新的会话,获取的session数据也是一个新的对象
- session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据
- cookie是存储在客户端,是可以长期保存
Session销毁
- session的销毁会有两种方式:
- 默认情况下,无操作,30分钟自动销毁,默认值是在Tomcat的web.xml配置文件中写死的
- 调用Session对象的invalidate()进行销毁
Cookie和Session小结
- Cookie和Session的区别
- 区别:
- 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
- 安全性:Cookie不安全,Session安全
- 数据大小:Cookie最大3KB,Session无大小限制
- 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
- 服务器性能:Cookie不占服务器资源,Session占用服务器资源
- 区别:
- 结论
- Cookie是用来保证用户在未登录情况下的身份识别
- Session是用来保存用户登录后的数据