清谈可以饱,梦想接无由
cookie
cookie 本意是小甜点, 在web开发中是用来维系状态的一种技术
服务器要向浏览器返回cookie
// 创建cookie
Cookie c = new Cookie(名, 值);
response.addCookie(c);
浏览器再发送请求时,会把这些cookie值重新发送给服务器
Cookie[] cookies = request.getCookies();
// 遍历 cookies 数组
应用场景: 自动登录、 记录访问网页
cookie 的属性
maxAge 用来设置 cookie 的寿命,
- 默认不设置(-1)表示浏览器关闭寿命就到期
- 指定一个正整数(单位秒),指定cookie存活多久
- 设置为 0,表示由服务器端删除该cookie
httpOnly 用来设置是否禁止 js 代码访问 cookie
有安全风险,因为信息是存储在浏览器端的
session
把这些状态信息存储在服务器端,安全性要比 cookie 高很多
1. 存储信息
// 拿到 session 对象
HttpSession session = request.getSession();
// 存储信息
session.setAttribute("名", 值);
2. 获取信息
// 拿到 session 对象
HttpSession session = request.getSession();
// 获取信息
session.getAttribute("名"); // 返回上一次存储的值
3. 删除信息
session.removeAttribute("名"); // 返回被移除的值
session.invalidate(); // 让session失效(全部清空)
默认生命周期,
第一次调用 request.getSession() 创建 session对象
如果隔了 30 分钟没有向服务器发送请求,session 会自动失效
如果要改变失效时间,可以在 web.xml中:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
跟浏览器的关系:一个浏览器对应服务器端的一个 session 对象
他们存储的信息互不干扰
对比 cookie 和 session
- 安全性上, session的安全性高,cookie的信息存在浏览器端所以不安全
- 存储的类型, session 存储的类型是 Object, cookie 只能存字符串(并且需要进行编码处理)
- 存储大小, session 理论上没有限制(但不建议存储太多内容), cookie 的限制:每个cookie不能超过4k,每个网站cookie个数也有限制的
- 失效时间, session 两次请求间隔30分钟, cookie 默认关闭浏览器失效,还可以通过 maxAge 调整的更长
请求重定向 (重点)
请求转发
request.getRequestDispatcher("跳转路径").forward(request, response);
请求重定向
response.sendRedirect("跳转路径");
二者的区别
- 请求转发的地址不会改动,始终是刚开始的地址, 请求重定向在跳转后,地址栏会变为目标地址
- 请求转发是一次请求,跳转操作在服务器内部发生;请求重定向是两次请求,跳转操作是在浏览器,服务器之间发生
- 请求转发可以使用 request.setAttribute 进行值的传递;请求重定向需要使用 session.setAttribute 进行值的传递
request, session 作用域(scope)对象 (重点)
作用范围限于一次请求
request.setAttribute(key, value);
request.getAttribute(key) ${key}
request.removeAttribute(key);
作用范围同一个浏览器的多次请求之间(一次会话)
session.setAttribute(key, value);
session.getAttribute(key) ${key}
session.removeAttribute(key);
页面作用域,作用范围限于当前页面
page
应用程序作用域,作用于整个应用程序
application
page < request < sesssion < application
${ key } 会从小的作用域向大的作用域依次查找,直到找到为止
也可以利用前缀精确地找某个作用域:
- pageScope page 作用域
- requestScope 请求作用域
- sessionScope 会话作用域
- applicationScope 应用程序作用域
jsp 中的隐式对象 (了解)
9 个
- pageContext 页面作用域
- request 请求对象
- session 会话对象
- application 应用程序对象
- response 响应对象
- out 响应输出流
- page 当前的jsp对象(this)
- config 用来读取和jsp配置相关的信息
- exception 必须在当前页面的 page 指令中添加 isErrorPage=“true”, 表示一个异常对象
会话跟踪的原理
就是利用 jsessionid 的 cookie 把浏览器和session对象关联起来