会话技术(Cookie / Session)
概述:
- 会话:一次会话中包含多次请求和响应
- 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到一方断开为止。
- 功能:在一次会话范围内的多次请求间,共享数据
- 方式:
- 客户端会话技术:Cookie(译作:小甜点)
- 服务端会话技术:Session(译作:主菜)
- 区别
- Session存储数据在服务器端,Cookie在客户端
- Session没有数据大小限制,Cookie有
- Session数据安全,Cookie相对于不安全
Cookie:
1 概念
- 客户端会话技术,将数据存到客户端
2 快速入门
- 使用步骤
- 创建Cookie对象,绑定数据
- new Cookie(String name, String value)
- 发送Cookie对象
- response.addCookie(Cookie cookie)
- 获取Cookie,拿到数据
- Cookie[] request.getCookies()
- 创建Cookie对象,绑定数据
3 实现原理
- 基于HTTP请求响应头set-cookie和请求头cookie实现的
4 Cookie细节
-
一次可不可以发送多个cookie请求?
可以创建多个cookie对象,是用response.addCookie方法发送cookie即可
-
cookie在浏览器可以保存多长时间?
- 默认情况下,浏览器关闭后,Cookie被销毁
- 持久化存储: setMaxAge(int seconds)
- 正数:将Cookie数据写到硬盘的文件。持久化储存。大小表示cookie存活时间。
- 负数:默认值
- 0:删除Cookie信息
-
cookie能不能存中文?
- tomcat 8之前,cookie中不能直接存储中文数据, 需要将中文编码转码,一般使用URL编码
- tomcat 8之后,cookie支持中文数据
-
cookie共享问题?
-
假设在一个tomcat服务器中,部署了多个WEB项目,那么在这些web中,cookie能否共享?
- 默认情况下cookie不能共享
- setPath(String path):设置cookie的获取范围,默认设置当前的虚拟目录
- 如果要共享,则可以将path设置为目标路径
-
不同的tomcat服务器间cookie共享问题?
- setDomain(String path):如果设计一级域名相同,那么多个服务器之间cookie可以共享
- setDomain(“baidu.com”),那么tieba.baidu.com和news.baidu.com中的cookie可以共享
-
5 Cookie的特点
- cookie数据存在客户端浏览器
- 浏览器对于单个cookie的大小有限制(一般为4kb左右)
- 浏览器对于同一个域名下的cookie数量也有限制(一般在20个以内)
6 Cookie的作用
- cookie一般用于存储少量的不太敏感的数据
- 在不登陆的情况下,完成服务器对客户端的身份识别
Session
1 概念
服务器端会话技术,再一次会话的多次请求间共享数据,将数据保存到服务器端的对象中。HttpSession
2 快速入门
- 获取Session对象 request.getSession()
- 使用Session对象 HttpSession对象:
- Object getAttribute(String name)
- void setAttribute(String name, Object value)
- void removeAttribute(String name)
3 Session原理
- Session的实现是依赖于Cookie的!
4 细节
- 当客户端关闭后,服务器不关闭,两次获取的session是否为同一个?
- 默认情况下不是(关闭服务器,会话结束)
- 如果需要相同,可以设置Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化储存
- 客户端不关闭,服务器关闭,两次获取的session是否为同一个?
- 不是同一个,但是要确保数据不丢失
- Session的钝化:
- 在服务器正常关闭之前,将Session对象序列化到硬盘上
- Session的活化:
- 在服务器启动后,将Session文件转化为内存中的session对象即可。
- Session的钝化:
- 不是同一个,但是要确保数据不丢失
- Session什么时候被销毁
- 服务器关闭
- 自杀:session对象调用 invalidate().
- 默认时间:30分钟(Tomcat可配置) 找到
<session-config> <session-timeout>30</session-timeout> </session-config>
5 Session的特点
- session用于存储一次会话间的多次请求的数据,存储在服务器端
- session可以存储任意类型,任意大小的数据