文档章节

Servlet技术 - Cookie与Session

抢小孩糖吃
 抢小孩糖吃
发布于 2016/09/03 15:41
字数 1266
阅读 145
收藏 2

#Cookie与Session ##会话使用

  • 使用场景

    • 偏好记录
    • 自动登录
    • 浏览记录
  • 原理

    • 客户端或者服务端保存用户数据

##Cookie与Session

  • Cookie
    会话数据保存在浏览器客户端
  • Session 会话数据保存在服务端

#Cookie ##Cookie定义 某些网站为了辨别用户身份,存储在用户本地终端上的数据

  • 会话数据
  • 保存在客户端
  • Key-Value形式数据

##Cookie工作流程 ###第一次访问

  • 1 客户端浏览器向服务器发送HTTP请求
  • 2 服务器根据需要生成cookie对象,并把一些数据保存在该cookie对象中
  • 3 服务器会把cookie对象放在http响应头中
  • 4 服务器发送HTTP响应给浏览器
  • 5 浏览器接收到HTTP响应,提出该cookie保存在浏览器端

###再次访问

  • 1 客户端浏览器向服务器发送HTTP求取带有cookie对象
  • 2 服务器根据获取的cookie对象生成HTTP响应

输入图片说明

##Cookie生命周期

  • 默认会话结束后失效
    只要关闭浏览器窗口,Cookie就消失了。这种我们叫做会话Cookie,会话Cookie我们会保存在内存中,而不是硬盘上。
  • setMaxAge设置cookie有效期
    如果设置了Cookie的有效时间,则浏览器会把cookie保存在硬盘上。我们关闭浏览器再次打开,这个Cookie依然有效,直到超过过期时间。

##Cookie的缺陷

  • 大小和数量限制
    一般来说每个站点能够保存20个Cookie,每个Cookie一般限制在4K以内。
  • 数据安全性
    由于HTTP数据内容传送是明文传送,则有安全风险

##Cookie实例 请求页面

<form method="post" action="user/specify">
        <p><input type="text" name="userName" value="" placeholder="username"></p>
        <p><input type="password" name="userPassword" value="" placeholder="password"></p>
        <p class="submit"><input type="submit" name="commit" value="submit"></p>
      </form>

UserServlet
注意:我们在response对象中设置Cookie,示例中代码问题,我们应当先判断request是否有Cookie,在给response添加cookie内容。

//Cookie初始化
Cookie userNameCookie = new Cookie("userName", userName);
		Cookie pwdCookie = new Cookie("pwd", userPassword);
                //过期时间
		userNameCookie.setMaxAge(10 * 60);
		pwdCookie.setMaxAge(10 * 60);

		response.addCookie(userNameCookie);
		response.addCookie(pwdCookie);

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

我们在第一次请求输入用户名密码,关闭浏览器再次打开页面,并没有输入用户名密码,也能够看到用户名密码信息内容。这是因为我们在第一次请求时创建了Cookie对象,在第二次请求的时候,浏览器把Cookie发送给了服务器,服务器知道是这个用户,实现自动登录。
通过Chrome查看Cookie对象
输入图片说明
输入图片说明

#Session ##Session特点

  • 保存在服务端

  • HttpSession
    用来保存用户的一些数据内容

  • 状态保存 ##Session工作原理

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

  • 2 服务端会根据服务器请求,生成对应的Session对象,并给这个Session对象附上唯一的编号,服务器端把需要的数据记录到Session对象

  • 3 服务器端进行其他逻辑处理,然后把Session的唯一编号放到Cookie中

  • 4 服务器返回HTTP响应给浏览器

  • 5 浏览器端会把带有这个Session ID的Cookie记录在浏览器本地

  • 当下一次浏览器发送HTTP请求时,会把带有Session ID的Cookie发送给服务器

  • 服务器获取带有Session ID的Cookie,取出对应的Session ID,根据Session ID找到对应的Session对象

  • 当服务器辨别用户之后,进行HTTP响应

##Session生命周期

  • 默认有效期30分钟
  • setMaxInactiveInterval设置有效期
  • 部署描述符配置Session有效期
  • 与Cookie不同的是,我们可以主动调用invalidate接口使用Session失效

###Session生命周期设置优先级 通过setMaxInactiveInterval接口设置有效期的优先级大于通过部署描述符配置的Session有效期

##Session实例 ###Session实例演示 在Servlet

		HttpSession session = request.getSession();
                session.setAttribute("username",userName);
		String name = (String) session.getAttribute("userName");

再次登录可以在输出打印到

second login: 123

打开Chrome开发者界面,查看SessionID

输入图片说明

###Session过期 ####设置Session过期时间

//设置当前会话的失效时间,不是web服务。单位秒
		session.setMaxInactiveInterval(1000);

####主动Session失效

session.invalidate();

##通过部署描述符(web.xml)设置session过期时间 web.xml

	<session-config>
		<session-timeout>5</session-timeout>
	</session-config>

这里配置的是分钟

#Cookie&Session总结

  • 数据存储
    Cookie是存放在客户端,Session存放在服务器
  • 安全性
    Cookie是存放在客户端安全较弱,但可以通过加密的形式进行存放。,Session存放在服务器内存,安全较强
  • 生命周期
    Cookie是存放在客户端,Session是间隔时间,以最后一次访问为主,可以直接使用API失效
  • 使用原则
    Cookie是存放在客户端,一个站点有20个以内数量限制。,Session存放在服务器内存,不建议存放大对象

© 著作权归作者所有

抢小孩糖吃

抢小孩糖吃

粉丝 70
博文 244
码字总数 235495
作品 0
东城
程序员
私信 提问
response.encodeURL的用法

Java Servlet API 中引用 Session 机制来追踪客户的状态。Servlet API 中定义了 javax.servlet.http.HttpSession 接口,Servlet 容器必须实现这个接口。当一个 Session 开始时,Servlet 容器...

阿秀a
2010/10/17
0
0
超详细的Java面试题总结之JavaWeb基础知识总结

Servlet总结: 在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet可以设置初始化参数,...

Java互联网架构师
2018/08/29
0
0
Servlet 工作原理解析

该文深入的介绍了 J2EE 中使用最广泛的 Servlet 技术运行原理,不管对于初学者还是高手来说都非常值得一看。 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与...

红薯
2011/02/25
8.2K
10
走进JavaWeb技术世界4:Servlet 工作原理详解

本文出自我的公众号:程序员江湖。 满满干货,关注就送。 从本篇开始,正式进入Java核心技术内容的学习,首先介绍的就是Java web应用的核心规范servlet 转自:https://www.ibm.com/developer...

你的猫大哥
2017/09/22
0
0
JavaWeb基础知识点之Servlet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w1lgy/article/details/79169527 一、servlet的概述 servlet是采用java编写的运行在服务器上的程序,用于接受...

我巴巴
2018/01/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
47分钟前
3
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
8
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
4
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部