cookie与session的联系与区别

清谈可以饱,梦想接无由

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对象关联起来

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务