尚硅谷-JavaWeb Day7 cookie和Session
1. cookie
① 介绍
-
- 是服务器通知客户端保存键值对的一种技术;
- 客户端有了 cookie 后,每次请求都发送给服务器;
- 每个 cookie 的大小不能超过 4 KB;
② 创建 cookie
-
- 创建 cookie 对象(new Cookie("key1", "value1"))
- 客户端保存 cookie(response.addCookie(cookie))
- 通过响应头 set-Cookie 通知客户端保存 cookie(Set-Cookie:key1=value1)
- 收到响应后,查找到 set-Cookie 响应头,就查看是否存在这个 cookie,有就修改,没有创建
注:解决 cookie 响应中文乱码:doPost方法添加 resp.setContentType("text/html; charset="UTF-8"")
③ 获取 cookie:(返回的 Cookie[ ]数组,获取指定 cookie 需要逐个判断)
客户端(有 cookie):通过请求头:Cookie:xx=xx,把 cookie 信息发送给服务器
服务器:获取客户端发送过来的 Cookie 只需要一行代码 req.getCookies(); 返回 Cookie[ ] 数组;
④ 修改 cookie 值:
方案一:
-
-
- 先创建一个要修改的同名 cookie 对象;
- 构造器同时赋于新的 cookie 值;
- 调用 response.addCookie(cookie);
-
方案二:
-
-
- 先查找到需要修改的 cookie 对象;
- 调用 setValue() 方法赋予新的 cookie 值;
- 调用 response.addCookie() 通知客户端保存修改;
-
⑤ Cookie 的存活设置(指如何管理 Cookie 什么时候被销毁(删除))
setMaxAge():设置 cookie 的最大生存时间(秒)(正:指定秒数后删;负:浏览器关就删;0:马上删)
⑦ Cookie 的有效路径 path 属性
path 属性可以有效过滤哪些 cookie 可以发送给服务器;(通过请求的地址来进行有效过滤)
⑧ 免用户名登录实现
2. Session
① 介绍
-
- Session 是一个接口(HttpSession)
- Session 就是会话,用来维护一个客户端和服务器之间关联的一种技术
- 每个客户端都有自己的一个 Session 会话
- Session 会话经常用来保存用户登陆之后的信息
② 创建 Session 和获取(id 号,是否为新)
-
- request.getSession():第一次调用是创建Session会话,之后都是获取创建好的Session会话对象;
- isNew():判断是否是刚创建的Session对象;
- 每个会话都有唯一一个 ID值,用 getId() 得到 Session 的会话 id 值;
③ Session 域中数据的存取:req.getSession() 的 setAttribuate("xxx") 和 getAttribuate("xx");
④ Session 生命周期:(正数设定时长,负数永不超时)
SetMaxInactiveInterval(int interval):设置 Session 的超时时间(秒)超时自动销毁
GetMaxInactiveInterval(int interval):获取 Session 的超时时间;
默认超时时长为 1800s = 30min(在Tomcat服务器的配置文件中默认服务器下所有Session会话为30分钟)
注:
a. 可修改 web.xml 设置超时时长:表示当前web工程,创建出来所有的 session 默认为 xx;
<session-config><session-timeout>xx</session-timeout></session-config>
b. 如果修改个别的 session 的超时时长,可以使用api:SetMaxInactiveInterval(int interval)
c. 超时指的是客户端两次请求的最大间隔时长;
d. invalidate() 让当前 Session 会话马上超时无效;
⑤ 浏览器和 session 之间关联的技术