Servlet学习笔记——第四天
Servlet学习打卡
Servlet学习笔记—第四天
Servlet笔记 第四天
一. 复习
二、用户信息追踪
1. 概念:
在通信过程中,保存记录用户一些重要的业务步骤操作 涉及的数据
2. 手段
1) cookie : 在客户端浏览器中保存用户状态数据
2)HttpSession:在服务器端保存用户状态数据
三. Cookie
1. 概念
1)服务器写到浏览器上的一小段String,由name和value两部分组成(不支持中文)
2)当浏览器访问服务器时,服务器可以读取浏览器上曾经自己写过的cookie
3)cookie有存活时间(可以设置)
2. 操作cookie的API
1)创建cookie对象 — Cookie c = new Cookie( name , value );
2)写cookie — response.addCookie©;
3)读cookie — request.getCookies() --> Cookie[] 如果没有读到,返回值为null
4)设置存活时间 — cookie.setMaxAge( xxx );
① 数字为正数: 表示存活多少秒
② 数字为负数: 表示cookie会在浏览器关闭时被销毁
5)设置cookie的访问路经 — cookie.setPath("…");
注意: http协议规定,只有处于同一路径下的程序才能访问该路径下程序写过的cookie(默认不能跨应用)
四. HttpSession
会话:client与服务器端的一次完整的通信过程(涵盖多次请求)
1. 使用【重点】
1)获取 — HttpSession session = request.getSession( boolean – true );
2)HttpSession是一个作用域,可以存放“命名属性”
① 存数据 — session.setAttribute(“name”,value);
② 取数据 — Object value = session.getAttribute(“name”);
③ 移除数据 — session.removeAttribute(“name”);
2. session对象的特点
1)生命周期比较长
begin: 当client访问的程序里第一次出现request.getSession(true)代码时(懒汉式创建)
end: timeout关闭session(服务器会为session设置一个有效存活时间 — 默认30分钟 )
控制session的有效存活时间
① 可以在tomcat的配置文件中修改tomcat产生的所有session的存活时间(统一修改)
tomcat — conf — web.xml
② 可以针对某一个应用中使用的session进行修改 — 程序中通过函数调用修改
session.setMaxInactiveInterval( time ); time单位秒
③ 主动销毁session对象 — 完成安全退出
session.invalidate();
2) 与用户相关(一个用户对应一个session对象) — 浏览器软件
① 问题: 在A程序里 sesssion.setAttribute(“name”,“hehe”); client1 访问了A程序
问:之后哪些程序可以通过session.getAttribute(“name”) 获取hehe数据
答:只要被client1请求的程序(不论功能),就可以得到hehe数据
② 原理:
当client向server申请session对象时,tomcat会首先读取浏览器上的cookie,查找JSESSIONID的cookie
—> 没找到: tomcat会为client创建新的session,同时将session的id以cookie的形式写入浏览器
—> 找到:获取cookie里的session id,在内存中查找对应的session对象,返回给client使用
③ 安全退出 和 关闭浏览器退出 的区别
安全退出 : 直接销毁client对应的session对象,并清除浏览器上的cookie
关闭浏览器退出: 存储了sessionid的cookie被销毁,再次访问时,无法提供之前session的id,tomcat为
client创建了新的session(原有session仍然存活30分钟)
注意: 保存sessionid的cookie JSESSIONID – 32位16进制数
3) url重写
① 如果浏览器拒绝接收cookie,则程序无法完成功能(一般不要求程序做出处理)
② 如果使用response.encodeURL() 来处理跳转路径,则可以在浏览器不支持cookie的情况下,让前后两个
网页使用同一个session对象
方法功能: 检测浏览器是否支持cookie,支持(不做任何处理原样返回),不支持(将当前网页里的
sessionid拼接到地址后面 url;jsessionid=xxxxxx )