Java开发工程师(Web方向) - 02.Servlet技术 - 第2章.Cookie与Session
第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
下面哪种场景没有使用会话技术?
- A.第二次登录某网站时,页面会显示“欢迎再次回来”的提示
- B.打开某网站,随机弹出广告2.00/2.00
- C.登录购物网站后,首页会推荐一些之前你浏览过的商品
- D.第一次登录某网站输入用户名密码后,第二次无需再次输入用户名密码
下面哪项关于Cookie与Session的生命周期说法是错误的?
- A.Session可以主动让其失效,Cookie则不行
- B.Session默认情况下,有效期是30分钟
- C.Cookie默认情况下,会话结束后失效
- D.Session通过部署描述符设置的有效期优先级高于通过API设置的有效期2.00/2.00
下面哪项说法是错误的?
- A.浏览器对每个站点能够存放的Cookie数量是没有限制的2.00/2.00
- B.Session的生命周期是间隔的,即从最后一次访问开始计时
- C.Cookie的生命周期是累积的,到点即失效
- D.浏览器对每个站点能够存放的Cookie的大小是有限制的
下面哪项对Session的说法是错误的?
- A.Session因为保存在服务端,所以可以任意使用2.00/2.00
- B.每一个Session对象都有一个唯一的Session Id
- C.程序开发人员可以通过API调用主动让Session失效
- D.Web应用程序关闭,Session会失效
下面哪项说法是正确的?
- A.Cookie有Cookie Id作为唯一标识,区分不同Cookie
- B.Session跟Cookie是独立存在的,没有相互依赖的关系
- C.每个站点只能访问存放在自己站点下的Cookie2.00/2.00
- D.Cookie是在客户端产生的
Cookie是保存在客户端,Session是保存在服务端
- A.√2.00/2.00
- B.×
- A.√2.00/2.00
- B.×
相对而言,Cookie比Session安全性更高
- A.√
- B.×2.00/2.00
Cookie是一直会保存在客户端浏览器中
- A.×2.00/2.00
- B.√
Session有默认的有效期,有效期过了Session数据会失效
- A.√2.00/2.00
- B.×
Java开发工程师(Web方向) - 02.Servlet技术 - 第2章.Cookie与Session的更多相关文章
- Java开发工程师(Web方向) - 02.Servlet技术 - 第3章.Servlet应用
第3章.Servlet应用 转发与重定向 转发:浏览器发送资源请求到ServletA后,ServletA传递请求给ServletB,ServletB生成响应后返回给浏览器. 请求转发:forward: ...
- Java开发工程师(Web方向) - 02.Servlet技术 - 第4章.JSP
第4章--JSP JSP JSP(Java Server Pages) - 中文名:Java服务器页面 动态网页技术标准 JSP = Html + Java + JSP tags 在服务器端执行,返回 ...
- Java开发工程师(Web方向) - 02.Servlet技术 - 第1章.Servlet
第1章--Servlet Servlet简介 Servlet应用于? 浏览器发出HTTP请求,服务器接收请求后返回响应给浏览器. 接收请求后到返回响应之间: 服务器将请求对象转交给Servlet容器 ...
- Java开发工程师(Web方向) - 02.Servlet技术 - 期末考试
Servlet课程考试 Servlet课程考试 Servlet课程考试 总分:55分 限定时间:120分钟 进入考试 答案已成功提交!请耐心等待成绩公布 Servlet课程考试: 1(12分) 简单谈 ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术
第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第2章.IoC容器
第2章.IoC容器 IoC容器概述 abstract: 介绍IoC和bean的用处和使用 IoC容器处于整个Spring框架中比较核心的位置:Core Container: Beans, Core, ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述
第1章.Spring概述 Spring概述 The Spring Framework is a lightweight solution and a potential one-stop-shop f ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第5章.Web框架
第5章--Web框架 Web框架概述 Web框架单元测验 本次得分为:13.50/15.00, 本次测试的提交时间为:2017-09-25 1单选(2分) 关于Spring MVC中Dispatche ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第4章.数据访问
第4章--数据访问 Spring JDBC DAO (Data Access Object) 实现数据访问相关接口(接口和实现分离) ORM (Object Relation Mapping) 对象关 ...
随机推荐
- diogo谈框,仿prompt()方法布局
展示效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 手机站全局的html+css加载等待效果
本文只提供思路,CSS神马的自己定制吧,JS是可以优化的,比如,输出图片的JS也可以放到showdiv()里面,我没有做优化,只是实现,别笑话我,我比较懒... 基本思路:由于Html的解析是从上到下 ...
- TortoiseSVN 分支创建与合并
前提准备: 确保本地Work Copy 和 服务器上的 版本一致.( 所有代码都提交到SVN,并update一次) 1 从主干创建分支代码 在本地Work Copy 选中项目文件夹,鼠标右键选择 ...
- Spring Boot集成Hazelcast实现集群与分布式内存缓存
Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展.高性能的分布式内存计算.并通过提供诸如Map,Queue,ExecutorService,Lock和JCach ...
- lable随堂笔记
lable标签与属性 lable标签:for属性,让标签与指定的input元素建立标签:将input元素包含在lable标签中. <table border="2" alig ...
- 前端js转换时间戳为时间类型显示
//时间戳转换 function add0(m){return m<10?'0'+m:m } function formatDate(timestamp) { //timestamp是整数,否则 ...
- MySQL的JOIN用法
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. CREATE TABLE t_blog( i ...
- STM32(1)——使用Keil MDK以及标准外设库创建STM32工程
转载来自:http://emouse.cnblogs.com 1.1 开发工具与开发环境 1. 软件版本 本节所使用Keil MDK 为目前的最新版V4.21.其他版本差别不大,读者可以根据自己使用的 ...
- python学习——函数进阶
首先来看下面这个函数. def func(x,y): bigger = x if x > y else y return bigger ret = func(10,20) print(ret) ...
- python网络编程之进程
一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...