韩sir
- Cookie技术
- Cookie简单示意图
- Cookie常用方法
- Cookie创建
- Cookie读取
- JSESSIONID
- 读取指定Cookie
- Cookie修改
- Cookie生命周期
- Cookie的有效路径
- Cookie作业布置
- Cookie注意事项
- Cookie中文乱码问题
- Session技术
- Session原理示意图
- Session常用方法
- Session底层机制
- Session生命周期
- Session生命周期说明
- Session生命周期实例
- Session作业
Cookie技术
Cookie简单示意图
- Cookie是服务器在客户端保存的用户信息, 比如登录名, 浏览历史等, 就可以以cookie的方式保存
- Cookie信息就像是小甜饼(cookie)一样, 数据量并不大, 服务器端在需要的时候可以从客户端读取
位置
Cookie常用方法
- Cookie有点像一张表(K-V), 分两列, 一个是名字, 一个是值, 数据类型都是String, 都是小量的数据, 如图
- 如果创建一个Cookie(在服务端创建)
Cookie cookie = new Cookie(String name, String val);
cookie.setMaxAge();//保存时间- 如何将一个Cookie添加到客户端
response.addCookie(cookie);- 如何读取cookie(在服务端读取cookie信息)
request.getCookies();
Cookie创建
新建一个Web工程->添加Web框架->新建lib, 引入servlet包Add as Library->配置tomcat->创建Servlet->浏览器抓包
Cookie读取
JSESSIONID
- 提示: 访问Servlet(比如 http://localhost:8088/cs/updateCookie)不会生成JSESSIONID, 访问http://localhost:8088/cs/才会生成
- 要关闭浏览器再开一个新的, 才能产生一个新的session绘画
读取指定Cookie
Cookie修改
Cookie生命周期
- Cookie的生命周期是指如何管理Cookie什么时候被销毁(删除)
- setMaxAge()
- 正数, 表示在指定的秒数后过期, 但仍存在于浏览器中
- 0表示马上在浏览器端删除Cookie
这里为何会有两个Set-Cookie?
- 负数, 表示浏览器关闭, Cookie就会被删除(默认值是-1)
Cookie的有效路径
规则如下:
cookie1.setPath = /工程路径
cookie2.setPath = /工程路径/aaa
请求地址: http://ip:端口/工程路径/资源
cookie1 会发送给浏览器
cookie2 不会发送给浏览器
请求地址: http://ip:端口/工程路径/aaa/资源
cookie1 会发送给服务器
cookie2 会发送给服务器
Cookie作业布置
Cookie注意事项
- 一个Cookie只能标识一种信息, 它至少含有一个标识该信息的名称(Name)和设置值(Value)
- 一个Web站点可以给一个浏览器发送多个Cookie, 一个浏览器也可以存储多个Web站点提供的Cookie
- Cookie总的数量没有限制, 但是每个域名的Cookie数量和每个Cookie的大小是有限制的(不同的浏览器限制不同), Cookie不适合存放数据量大的信息
Cookie中文乱码问题
如果存放中文的cookie, 会报错, 可以通过url编码和解码解决
Session技术
- Session是服务器端技术, 服务器在运行时会为每一个用户的浏览器创建一个其独享的session对象/集合
- 由于session为各个用户浏览器独享, 所以用户在访问浏览器的不同页面时, 可以从各自的session中读取/添加数据, 从而完成相应任务
Session原理示意图
- 当用户打开浏览器, 访问某个网站, 操作session时, 服务器就会在内存(在服务端)为该浏览器分配一个session对象, 该session对象被这个浏览器独占
- 这个session对象也可看作是一个容器/集合, session对象默认存在时间30min(Tomcat的conf/web.xml中配置的), 也可修改
- session可以做什么?
- 网上商城的购物车
- 保存登陆用户的信息
- 将数据放入到Session中, 供用户在访问不同页面时, 实现跨页面访问数据
- 防止用户非法登录到某个页面
- Session存储结构示意图
- 你可以把Session看作是一种容器类似HashMap, 有两列(K-V), 每一行就是session的一个属性.
- 每个属性包含有两个部分, 一个是该属性的名字(String), 另一个是该属性的值(Object)
Session常用方法
- 创建和获取Session
HttpSession hs = request.getSession()
第一次调用是创建Session会话, 之后调用是获取创建好的Session对象 - 向session添加属性
js.setAttribute(String name, Object obj) - 从session得到某个属性
Object obj = hs.getAttribute(String name) - 从session删除某个属性
hs.removeAttribute(String name) - isNew();
判断是不是刚创建出来的Session - 每个Session都有1个唯一标识Id值. 通过getId() 得到 Session的会话 id值
Session底层机制
项目重新发布Session会清空
Session生命周期
Session生命周期说明
- public void setMaxInactiveInterval(int interval), 设置Session的超时时间(以秒为单位), 超过指定的时长, Session就会被销毁
- 值为正数的时候, 设定Session的超时时长
- 负数表示永不超时
- public int getMaxInactiveInterval()获取Session的超时时间
- public void invalidate() 让当前Session会话立即无效
- 如果没有调用setMaxInactiveInterval()来指定Session的生命时长, Tomcat会以Session的默认时长为准, Session的默认超时时间为30min, 可以在tomcat的web.xml中配置
- Session的生命周期指的是: 客户端/浏览器两次请求的最大间隔时长, 而不是累积时长, 即当客户端访问了自己的session, session的生命周期将从0开始重新计算
- 底层: Tomcat用一个线程来轮询会话状态, 如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁
Session生命周期实例
解读: Session的生命周期
- 指的是两次访问session的最大间隔时间
- 如果你在session没有过期的情况下, 操作session, 则会重新开始计算生命周期
- session是否过期, 是由服务器来维护和管理
- 如果我们调用了invalidate(), 会直接将该session删除/销毁
- 如果希望删除session对象的某个属性, 使用removeAttribute(“xx”)
Session作业