第2章--Cookie与Session

Cookie与Session

浏览器输入地址--HTTP请求--Servlet--HTTP响应--浏览器接收

会话(session):打开浏览器,打开一系列页面,关闭浏览器

使用场景:

网购网站的偏好记录

网站的自动登录

浏览记录,如欢迎标语“xxx再次回来”

原理:客户端/服务器端保存会话数据:Cookie(浏览器端)/Session(服务器端)

Cookie:

为了辨别用于身份而储存在用户终端的key-value数据

工作流程:

浏览器发出HTTP请求

服务器根据需要生成Cookie对象并把相关数据保存在该对象中

将Cookie对象放在HTTP响应头中一并发送给浏览器

浏览器接收到响应后,提出该Cookie并保存;

浏览器第二次访问该服务器时

将Cookie放在请求头中一并发送给服务器

服务器从请求头中提取该Cookie对象读取数据做出个性化的响应

Cookie的生命周期:

默认为 会话结束后失效 -- 称为会话Cookie,一般保存在内存中

setMaxAge设置有效期,保存在硬盘中

Cookie的缺陷:

大小和数量的限制:一般为每个站点保存最多20个Cookie,每个Cookie在4k以内

数据安全性问题:HTTP请求中的Cookie是明文传递的

Cookie:

case:登陆

登陆页面 form post获取userName和userPassword到user/specify

在user/specify的Servlet中:process() 中

String userName=request.getParameter("userName");

String userPassword=request.getParameter("userPassword");

// 创建Cookie
Cookie userNameCookie = new Cookie("userName", userName);
Cookie passwordCookie = new Cookie("password", userPassword);
// 将Cookie放入对应的响应体中
response.addCookie(userNameCookie);
response.addCookie(passwordCookie);
// 设置过期时间
userNameCookie.setMaxAge(2 * 60); // unit minute
passwordCookie.setMaxAge(2 * 60);

第二次登陆时读取cookie:

Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(Cookie cookie: cookies) {
if(cookie.getName().equals("userName")) {
userName = cookie.getValue();
}
if(cookie.getName().equals("userPassword") {
userPassword = cookie.getValue();
}
}
}

第二次登陆页面时,打开developer tools--Application--cookies可见详情

Session:

HTTPSession服务器端为客户端创建的对象,用于保存客户端的状态数据

工作原理:

浏览器端发送HTTP请求到服务器端

服务器端根据请求需求生成一个Session对象,并给该对象附上唯一编号和对应数据

服务器端将Session对象的唯一编号放到Cookie对象中

服务器将HTTP响应返回给浏览器端

浏览器再次发送请求到该服务器时

服务器收到带有Seesion id的Cookie之后,取出Session id,找到对应Session对象

辨别出对应用户后,对用户进行个性化的响应

Session生命周期

默认有效期30分钟

setMaxInactiveInterval设置有效期(单位:秒)

部署描述符配置有效期(单位:分钟)

<session-config>
<session-timeout>2</session-timeout>
</session-config>

invalidate使Session失效

--优先级:接口 > 部署描述符

case:登陆(在上例Cookie的基础上)

// 创建HTTPSession对象
HttpSession session = request.getSession(); // 无Session时默认创建新的Session对象
String name = (String) session.getAttribute("userName");
session.setMaxInactiveInterval(2 * 60);  // expire time (seconds)
session.invalidate();  // invalidate the session // 再次请求时
if (name != null) {
syso("second login: " + name);
} // 将数据放入Session对象
session.setAttribute("userName", userName);

在Chrome--developer tools--Application--Cookies--可以看到JSESSIONID

总结:

数据存储:Cookie存在于客户端;Session存在于服务器端

安全性:Cookie在客户端明文传递;Session存在于服务器端的内存中,安全性较强

生命周期:到时间失效;Cookie时间设置为第一次访问开始算起;Session时间设置为从最后一次访问开始算起,Session可主动让其失效

使用原则:Cookie有数量(20)、大小(4k)限制;Session存在于内存,建议大小不要太大

单元测验: Cookie与Session

本次得分为:20.00/20.00, 本次测试的提交时间为:2017-08-07, 如果你认为本次测试成绩不理想,你可以选择再做一次。
1单选(2分)

下面哪种场景没有使用会话技术?

  • A.第二次登录某网站时,页面会显示“欢迎再次回来”的提示
  • B.打开某网站,随机弹出广告2.00/2.00
  • C.登录购物网站后,首页会推荐一些之前你浏览过的商品
  • D.第一次登录某网站输入用户名密码后,第二次无需再次输入用户名密码
2单选(2分)

下面哪项关于Cookie与Session的生命周期说法是错误的?

  • A.Session可以主动让其失效,Cookie则不行
  • B.Session默认情况下,有效期是30分钟
  • C.Cookie默认情况下,会话结束后失效
  • D.Session通过部署描述符设置的有效期优先级高于通过API设置的有效期2.00/2.00
3单选(2分)

下面哪项说法是错误的?

  • A.浏览器对每个站点能够存放的Cookie数量是没有限制的2.00/2.00
  • B.Session的生命周期是间隔的,即从最后一次访问开始计时
  • C.Cookie的生命周期是累积的,到点即失效
  • D.浏览器对每个站点能够存放的Cookie的大小是有限制的
4单选(2分)

下面哪项对Session的说法是错误的?

  • A.Session因为保存在服务端,所以可以任意使用2.00/2.00
  • B.每一个Session对象都有一个唯一的Session Id
  • C.程序开发人员可以通过API调用主动让Session失效
  • D.Web应用程序关闭,Session会失效
5单选(2分)

下面哪项说法是正确的?

  • A.Cookie有Cookie Id作为唯一标识,区分不同Cookie
  • B.Session跟Cookie是独立存在的,没有相互依赖的关系
  • C.每个站点只能访问存放在自己站点下的Cookie2.00/2.00
  • D.Cookie是在客户端产生的
6判断(2分)

Cookie是保存在客户端,Session是保存在服务端

  • A.√2.00/2.00
  • B.×
7判断(2分)
Cookie和Session都是保存的key,value的键值对数据
  • A.√2.00/2.00
  • B.×
8判断(2分)

相对而言,Cookie比Session安全性更高

  • A.√
  • B.×2.00/2.00
9判断(2分)

Cookie是一直会保存在客户端浏览器中

  • A.×2.00/2.00
  • B.√
10判断(2分)

Session有默认的有效期,有效期过了Session数据会失效

  • A.√2.00/2.00
  • B.×

Java开发工程师(Web方向) - 02.Servlet技术 - 第2章.Cookie与Session的更多相关文章

  1. Java开发工程师(Web方向) - 02.Servlet技术 - 第3章.Servlet应用

    第3章.Servlet应用 转发与重定向 转发:浏览器发送资源请求到ServletA后,ServletA传递请求给ServletB,ServletB生成响应后返回给浏览器. 请求转发:forward: ...

  2. Java开发工程师(Web方向) - 02.Servlet技术 - 第4章.JSP

    第4章--JSP JSP JSP(Java Server Pages) - 中文名:Java服务器页面 动态网页技术标准 JSP = Html + Java + JSP tags 在服务器端执行,返回 ...

  3. Java开发工程师(Web方向) - 02.Servlet技术 - 第1章.Servlet

    第1章--Servlet Servlet简介 Servlet应用于? 浏览器发出HTTP请求,服务器接收请求后返回响应给浏览器. 接收请求后到返回响应之间: 服务器将请求对象转交给Servlet容器 ...

  4. Java开发工程师(Web方向) - 02.Servlet技术 - 期末考试

    Servlet课程考试 Servlet课程考试 Servlet课程考试 总分:55分 限定时间:120分钟 进入考试 答案已成功提交!请耐心等待成绩公布 Servlet课程考试: 1(12分) 简单谈 ...

  5. Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

    第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...

  6. Java开发工程师(Web方向) - 04.Spring框架 - 第2章.IoC容器

    第2章.IoC容器 IoC容器概述 abstract: 介绍IoC和bean的用处和使用 IoC容器处于整个Spring框架中比较核心的位置:Core Container: Beans, Core, ...

  7. Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述

    第1章.Spring概述 Spring概述 The Spring Framework is a lightweight solution and a potential one-stop-shop f ...

  8. Java开发工程师(Web方向) - 04.Spring框架 - 第5章.Web框架

    第5章--Web框架 Web框架概述 Web框架单元测验 本次得分为:13.50/15.00, 本次测试的提交时间为:2017-09-25 1单选(2分) 关于Spring MVC中Dispatche ...

  9. Java开发工程师(Web方向) - 04.Spring框架 - 第4章.数据访问

    第4章--数据访问 Spring JDBC DAO (Data Access Object) 实现数据访问相关接口(接口和实现分离) ORM (Object Relation Mapping) 对象关 ...

随机推荐

  1. CSS-自定义变量

    使用背景: 一些常见的例子: 为风格统一而使用颜色变量 一致的组件属性(布局,定位等) 避免代码冗余 *更方便的从CSS向JS传递数据(例如媒体断点) 为什么使用: 以下几点是未来CSS属性的简短说明 ...

  2. 大数据框架-Hbase

    大规模结构化集群存储数据库.Table中的所有行都按照row key的字典序排列. 主键:row Key.访问行只能通过rowKey访问(范围或者准确值),或者全表扫描: 列族:cloumn fami ...

  3. iOS universallinks唤醒app

    从iOS9之后,苹果就推出了这个功能,用来唤醒外部app.这个功能在那些电商app上使用尤其广泛,当你打开对应的h5网页后,上面跳出一个是否跳转app的按钮. 现在iOS11已经基本覆盖,iOS12也 ...

  4. mybatis if 语句嵌套

    在使用mybatis的时候,可以在 if 标签下面加上if标签. 比如要对这个sql语句进行改进. select a.* from emp a inner join dept b on a.deptn ...

  5. ubnutu 安装protocol buffer

    工作中需要使用protocol buffer,需要编译出protocol buffer的动态链接库,然后在别的makefile中链接它, 我的环境是ubnutu16.04,64bit,使用的proto ...

  6. qq空间认证教程:借助企鹅媒体平台认证QQ公众空间

    年轻人,最近你是否眼看众多新开的QQ空间认证成功,自己却一筹莫展,而心情极度狂躁焦虑,别急,以下是详细教程,不能保证100%,但老夫已认证成功几个号. 不废话,直接上流程: 方法大致有2种: 1. 通 ...

  7. ElasticSearch 集群安装,简单使用

    http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html https://gith ...

  8. JPMML解析PMML模型并导入数据进行分析生成结果

    JPMML解析Random Forest模型并使用其预测分析 导入Jar包 maven 的pom.xml文件中添加jpmml的依赖 <dependency> <groupId> ...

  9. 说一说MySQL的锁机制

    锁概述 MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则. 最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁. 表锁就是把 ...

  10. html5新特性与用法大全了解一下

    有好多小伙伴私聊我问我html5新特性 和用法,下面我给大家具体介绍一下html5都新加了哪些新特性,下面我给大家总结一下. 1)新的语义标签 footer header 等等2)增强型表单 表单2. ...