会话跟踪技术
WHY WHAT HOW
大纲
什么需要会话跟踪技术?
因为http是无状态的,不能区分用户是谁,实际上很多需求需要区分请求用户是谁
HTTP无状态:服务器不清楚哪个请求是哪个用户发送的
Cookie
Cookie是客户会话跟踪端技术
Cookie如何使用?
1.在服务端怎么创建Cookie ,
Cookie cookie new Cookie("名称","值")
2.响应,把cookie数据写回浏览器
响应对象.addCookie(cookie);
3.如何在JSP和Servlet中获取Cookie
${cookie.名称.value}
4.获取cookie数据
通过遍历 请求对象.getCookies() 返回的是一个数组 ,遍历数组
cookie.getName(); cookie.getValue();
特点:Cookie 客户端存储技术,数据最终存在浏览器中,请求如果符合条件就会自动携带到服务器
思考: 与对比路径传参,有什么好处,有什么缺点
自己不用手动传参,相对安全一些,但不是绝对安全. 问题:还得反复校验
问题:
- Cookie是由服务器端程序创建的
- Cookie从服务器端带到了客户端
- Cookie最终存在了浏览器,再一次访问服务器端资源时实现数据共享
- Cookie中数据的传递方向:浏览器->服务器(Cookie) ->浏览器(存入)->服务器(获取Cookie数据)
Cookie存活时间
默认情况下,会话Cookie存在于内存中,浏览器关闭了,会话结束
删除Cookie
Cookie对象.setMaxAge(0); //存的是秒数
resp.addCookie(Cookie对象); //删除后需要重新发送给浏览器去更新
Cookie的域和路径
来限制Cookie的数据,也是保护了数据
Session
Session是服务器端技术.服务器在运行时可以为每一个用户浏览器创建一个其独享的session对象
通过Cookie jessionid 字符串的唯一性
存入session的cookie是会话cookie,浏览器关闭了,对应的session就会丢失
Session API
- getSession() :判断是否存在Session,存在则获取,不存在则创建新Session对象返回
- setAttribute(String name,Object value) :设置属性名和属性值
- getAttribute(String name):通过属性名获取属性值
- removeAttribute(String name) :从Session中移除指定属性名的属性值
- invalidate() :移除整个Session对象,删除所有的属性和属性值
Session超时管理
可以设置会话的有效时间
局部设置
session.setMAInactiveInterval(int interval)
Session属性命名 格式规范
XX_IN_SESSION ,这个属性名是唯一的
Session如何使用,有什么特点?
如何创建或获取session对象,存入数据?
HttpSession session =请求对象.getSession()
session.setAttribute("名称",值);
如何获取session 中的数据,如何移除session中的数据
session.getArrribute("名称");
session.invalidate()
若是在JSP中使用EL直接获取即可
对比Cookie Session有什么好处
相对于Cookie更安全,`还是得反复校验,但是不用去数据库