JavaWeb(四)——Web会话(cookie、session)

第四章:Web会话

第1节:会话跟踪概述


知识点1:会话的概念与作用

1.什么是会话

浏览器和服务器之间的一次连续的通讯过程叫做会话.
在这里插入图片描述

2.会话的作用

会话跟踪技术就能够实现这样的功能:

1.能够跟踪客户端与服务器端的交互,

2.保存和记忆相关的信息,

3.保存请求的状态信息。

4.解决HTTP协议的无状态的弊端


知识点2:现行常用的会话跟踪技术

1.URL方式:需要保存的信息直接追加到URL后,例如:http://127.0.0.1:8080/chapter03/viewList?pageNo=12

2.隐藏域方式:可以使用表单中的隐藏域保存相关信息, 例如:

<input type=“hidden” name=“status" value=“true">

3.Cookie方式:将状态信息保存到客户端,服务器能够获得相关信息进行分析,从而生成对客户端的响应;例如简化登录功能就可以使用Cookie实现;

4.Session方式:将状态信息保存到服务器的会话对象中,通过唯一标记的ID值与客户端进行绑定使用;例如访问控制功能就可以使用Session实现.


第2节:Cookie

知识点1: Cookie的功能与特点

1.什么是Cookie

​ Cookie是保存在客户端的小文本

2.Cookie的功能

​ 将用户活动过程中 的状态信息保存在客户端

3.Cookie的特点

​ 1.Cookie在客户端保存用户的信息

​ 2.服务器可以得到用户的信息进行处理,跟踪用户的状态


知识点2: Cookie的域及最大生命时间

1.name:cookie的名字,每个cookie都有一个名字;

2.content:cookie的值,与名字一起作为键值对形式存在;

3.domain:域,该cookie的域名,例如左图中是163.com,说明当前cookie来自163.com;

4.path:路径,访问163.com下该路径时,当前cookie将被发送;

5.Created:cookie被创建的时间;

6.Expired:cookie失效的时间;

7.最大生命时间:失效时间和创建时间的时间差,就是cookie的最大生命时间,超过该时间,cookie将失效,不再被发送到相应的域地址;


知识点3:在Servlet中创建Cookie、设置Cookie属性

在这里插入图片描述


知识点4:在响应中设置Cookie信息

​ 如何将创建好的cookie对象保存到客户端?

​ response.addCookie(cookie);

作用:

1.将Servlet创建好的Cookie对象放到response对象中

2.在没有设置最大生命时间的情况下.浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存中,关闭浏览器缓存就没有了,cookie也没有了.

3.如果设置了最大生命时间(如:7243600)的情况下,浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存和硬盘中,关闭浏览器缓存就没有了,cookie还存在,下次开启浏览器访问网站时cookie还能使用.

执行流程

1.第一次请求:服务器将cookie放到response对象中,让浏览器保存cookie对象
在这里插入图片描述

2.第二次请求:浏览器会自动带Cookie对象一并发送到服务器

在这里插入图片描述


知识点5:获取请求中的Cookie信息

当访问相同域及路径时,没有超过有效时间的cookie将自动通过请求被发送到服务器端
在这里插入图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 创建Cookie
		Cookie cookie = new Cookie("username", "zhangsan");
		//将cookie保存到客户端
		response.addCookie(cookie);
		//得到浏览器发送过来的cookie
		Cookie[] cookies = request.getCookies();
		//遍历数组
       if(cookie!=null){
		for (Cookie cookie2 : cookies) {
			System.out.println(cookie2.getName()+":"+cookie2.getValue());
		}
} 
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

知识点6:Cookie的最大生命时间

1.在没有设置最大生命时间的情况下

​ 浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存中,关闭浏览器缓存就没有了,cookie也没有了.

关闭浏览器,关闭服务器重启

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//得到浏览器发送过来的cookie
		Cookie[] cookies = request.getCookies();
		//遍历数组
		if (cookies==null) {
			// 创建Cookie
			Cookie cookie = new Cookie("username", "zhangsan");
			//将cookie保存到客户端
			response.addCookie(cookie);
		}else {
			for (Cookie cookie2 : cookies) {
				System.out.println(cookie2.getName()+":"+cookie2.getValue());
			}
		}
		
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

2.如果设置了最大生命时间的情况下

​ 浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存和硬盘中,关闭浏览器缓存就没有了,cookie还存在,下次开启浏览器访问网站时cookie还能使用.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//得到浏览器发送过来的cookie
		Cookie[] cookies = request.getCookies();
		//遍历数组
		if (cookies==null) {
			// 创建Cookie
			Cookie cookie = new Cookie("username", "zhangsan");
			cookie.setMaxAge(7*24*3600);//设置cookie的最大生命时间为7天
			//将cookie保存到客户端
			response.addCookie(cookie);
		}else {
			for (Cookie cookie2 : cookies) {
				System.out.println(cookie2.getName()+":"+cookie2.getValue());
			}
		}
		
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


第3节:Session

知识点1:Session简介

1.什么是session

Session是存储在服务器上的对象,该对象由服务器创建并维护,是会话跟踪的另一种实现手段

2.Session的特点

​ 1.服务器为客户端与服务器的每一次会话过程都创建并维护一个Session对象;

​ 2.每个服务器对Session的创建和维护的底层实现有所区别

在这里插入图片描述

3.Tomcat如何维护session对象的id

Tomcat使用Cookie来维护Session对象的ID值;该Cookie名字为JSESSIONID ;

4.客户端开始一次会话过程的步骤(会话跟踪的原理)

在这里插入图片描述

知识点2:Session使用方法

1.session能保存任何对象

2.session保存的是状态信息,如:登录信息(用户信息),其他的状态信息.

3.session可以跨页面,跨请求访问,session可以使用重定向的方式带数据

4.不能无限制的存储,随着越来越多用户登录,Session 所需要的服务器内存量也会不断增加

5.每个 Session 对象的持续时间是用户访问的时间加上不活动的时间

6.实现自定义session的基本步骤

​ 1.Session的实现仍然依靠临时态的Cookie,因此需要定义一个属于自定义session体系的Cookie名称(如JavaEE应用服务器中常用的JSESSIONID)

​ 2.在服务端创建一个Map,用于存放所有的用户会话

​ 3.当用户访问系统时,检查请求中是否存在以自定义session体系Cookie名称命名的Cookie信息

​ 3.1如果没有,说明是一个新用户,则为该用户生成一个唯一的sessionId字符串,并在响应中添加该Cookie值(注意不要提供Cookie的生效时间,那么该Cookie即为瞬态的,只在浏览器当前进程中生效)

​ 3.2如果有则查看Map中是否存在该会话,有即获取会话信息,没有说明该会话已经超时,为用户构建一个新的会话

​ 4.一个用户的会话对象实质上也是一个Map,可以通过键值对的形式存放、获取会话变量

知识点3:HttpSession对象的获取

1.request接口提供的方法
在这里插入图片描述

2.用法

​ request.getSession()

​ 获取与当前请求相关的session对象,如果session对象不存在,创建一个新的session对象

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//在servlet中调用request.getSession()的方法得到session对象
		HttpSession session = request.getSession();
		//id
		String id = session.getId();
		//out
		response.getWriter().append("Served at: ").append(id);
	}

在这里插入图片描述

知识点4:剖析session的执行过程

1.第一次访问Servlet请求

客户端浏览器的cookie缓存中并没有存储sessionid的cookie,不会发送JSESSIONID的cookie

在这里插入图片描述

2.第一次访问Servlet响应

向浏览器发送JSESSIONID的cookie,让浏览器保存该cookie

在这里插入图片描述

在这里插入图片描述

3.第二次及以后访问servlet请求

第二次及以后请求浏览器就会服务器发送JSESSIONID的cookie

在这里插入图片描述

在这里插入图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//在servlet中调用request.getSession()的方法得到session对象
		HttpSession session = request.getSession();
		//id
		String id = session.getId();
		//得到cookie
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			for (Cookie cookie : cookies) {
				String name = cookie.getName();
				if (name.equals("JSESSIONID")) {
					System.out.println("JSESSIONID="+cookie.getValue());
				}
			}
		}
		//out
		response.getWriter().append("Served at: ").append(id);
	}

知识点5:Session常用方法

1.添加属性

​ session.setAttribute(name,value);

2.获得属性

​ session.getAttribute(name);

3.删除属性

​ session.removeAttribute(name);

在这里插入图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 得到session
		HttpSession session = request.getSession();
		//向session对象添加属性值
		session.setAttribute("username", "zhangsan");
		//响应重定向到jsp
		response.sendRedirect(request.getContextPath()+"/welcome.jsp");
	}
<body>
	<%=request.getSession().getAttribute("username")%>
</body>

在这里插入图片描述

4.session失效的方法

(1)为什么要让Session失效

1.会话对象是存储在服务器端的对象,一直存在需要占用一定的服务器资源;

2.会话中往往保存着用户的一些数据,如果一直有效,存在一定安全隐患。

(2)Session失效的方法

1.服务器都有默认的会话失效时间,Tomcat默认是30分钟;

2.可以在web.xml中配置失效时间,例如:配置失效时间是50分钟;

<session-config>
   <session-timeout>50</session-timeout>
</session-config>

3.调用HttpSession接口中的两个方法,可以对指定的会话对象进行销毁

在这里插入图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 得到session
		HttpSession session = request.getSession();
		//向session对象添加属性值
		session.setAttribute("username", "zhangsan");
		session.invalidate();
		//响应重定向到jsp
		response.sendRedirect(request.getContextPath()+"/welcome.jsp");
	}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值