一、会话跟踪技术
-
http协议是无状态的
-
很多时候,我们需要把它搞成有状态的,例如京东购物
-
实现思路,借助http协议的响应头和请求头来回传递标识
具体技术实现:cookie 和 session
-
客户端会话跟踪技术:Cookie(保存在浏览器端)
-
服务端会话跟踪技术:Session(共享数据保存在浏览器内存中)
-
-
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
-
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
二、Cookie
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问(多次请求共享数据)
Cookie 基本使用
-
创建Cookie对象,设置数据
Cookie cookie = new Cookie("key","value");
-
发送Cookie到客户端:使用response对象
response.addCookie(cookie);
-
获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
-
遍历数组,获取每一个Cookie对象:for
-
使用Cookie对象方法获取数据
cookie.getName(); cookie.getValue();
Cookie 原理
- 对于Cookie的实现原理是基于HTTP协议的,其中设计到HTTP协议中的两个请求头信息:
- 响应头:set-cookie
- 请求头: cookie
Cookie 使用细节
Cookie 存活时间
-
默认情况下,Cookie 存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
-
setMaxAge(int seconds):设置Cookie存活时间
-
正数:将 Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
cookie.setMaxAge(60 * 60 * 24 * 7);//持久化保存cookie
-
负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则 Cookie被销毁
cookie.setMaxAge(-1);//默认值,浏览器关闭,Cookie销毁
-
零:删除对应 Cookie
cookie.setMaxAge(0);//删除Cookie
-
-
Cookie 存储中文
Cookie 小结:
-
cookie的作用?
多次请求共享数据
request(一次请求共享数据)——》 会话跟踪(cookie和session)多次请求之间共享数据——》数据库
-
Cookie能解决什么问题?
多次请求共享数据
-
cookie是如何把http的无状态搞成有状态的?
通过HTTP响应头
-
cookie是浏览器,还是web服务器端创建的?
服务器
-
如何创建cookie?
Cookie cookie = new Cookie(key, value);
-
如何保存cookie,如何持久化保存cookie?
coolie.setMaxAge(int seconds)://设置Cookie存活时间 cookie.setMaxAge(60 * 60 * 24 * 7);//持久化保存cookie
-
如何删除cookie?
cookie.setMaxAge(0);
三、Session
Session是基于Cookie实现的。
Session实现的也是一次会话中的多次请求之间的数据共享。
Session 基本使用
-
服务端会话跟踪技术:将数据保存到服务端
-
JavaEE 提供 HttpSession接口,来实现一次会话的多次请求间数据共享功能
-
使用:
-
获取Session对象
HttpSession session = request.getSession();
-
Session对象功能:
- 存储数据到 session 域中
void setAttribute(String name, Object o);
- 根据 key,获取值
Object getAttribute(String name);
- 根据 key,删除该键值对
void removeAttribute(String name);
-
Session 使用细节
Session 钝化、活化:
服务器重启后,Session中的数据是否还在?
只要浏览器没有关闭数据就还在
-
钝化:在服务器正常关闭后, Tomcat会自动将 Session数据写入硬盘的文件中
//销毁session //安全退出(注销) session.invalidate();
-
活化:再次启动服务器后,从文件中加载数据到Session中
让session浏览器关闭还能使用数据
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
-
Seesion 销毁:
默认情况下,无操作,30分钟自动销毁
<session-config> <session-timeout>30<session-timeout> </session-config>
调用 Session对象的 invalidate()方法
安全退出
//销毁session //安全退出(注销) session.invalidate();
Session 小结
-
Session的作用?
request——》会话范围(多次请求和响应,Redirect)——》数据库
-
如何获取?
//1.获取session HttpSession session = request.getSession();
-
如何保存数据到session
//2.向session中保存数据 session.setAttribute("msg", "天王盖地虎");
-
如何从session中取出数据?
// 2.从session中获取数据 Object cipher = session.getAttribute("msg");
-
如何销毁session
//销毁session //安全退出(注销) session.invalidate();
-
session的原理
Session是基于Cookie实现的
-
session的注意事项
session的创建并不是在浏览器向服务器发出请求的瞬间产生的,而是在server端调用HttpServletRequest.getSession()时创建的。
Cookie与Session区别?
-
相同点:
- 都可以在多次请求和响应之间共享数据
-
不同点
-
数据保存位置
cookie:浏览器端
session:服务器内存中
-
安全性
cookie:不太安全
session:安全
-
数据大小
cookie:4kb,字符串
session: Object,无限制
-
保存时间
cookie:长期保存,持久化
session:默认30分钟
-