JavaWeb中Cookie和Session会话技术的学习

1.会话技术

一次会话中包含多次请求和响应。而一次会话指浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开位置。
会话技术的主要功能:在一次会话范围内的多次请求和响应间,共享数据。
因为HTTP协议的缘故,浏览器和服务器的每次请求和响应都是独立的,数据不能共享。因此会话技术的提出就是解决这一问题。

会话可简单理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
会话过程中要解决一些问题:每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据;那么怎样解决这样的问题呢?——借助于两种会话技术Cookie与Session。

2.Cookie

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

2.1.Cookie快速入门

Cookie的实现原理:基于响应头set-cookie和请求头cookie实现。

使用步骤
(1)创建Cookie对象,绑定数据。new Cookie(String name,String value)
(2)发送Cookie对象。response.addCookie(Cookie cookie)
(3)获取Cookie中的数据。Cookie[]=request.getCookies()

// 1.创建Cookie对象
Cookie cookie = new Cookie("msg","HelloCookie");
// 2.发送Cookie
response.addCookie(cookie);

// 3.获取Cookie
Cookie[] cookies = request.getCookies();
// 4.获取数据,便利Cookies
if (cookies != null) {
	for (Cookie cookie : cookies) {
		String cookieName = cookie.getName();
        String value = cookie.getValue();
        System.out.println(cookieName + ":" + value);
	}
}

在这里插入图片描述
若出现以下错误信息,原因是Tomcat的版本比较高,所以在addCookie时是不能使用空格的。
在这里插入图片描述

2.2.Cookie的特点及使用细节

特点
①Cookie储存数据在客户端浏览器,安全性差,容易丢失或篡改。
②浏览器对于单个Cookie的大小有限制(一般4kb以内),以及对同一个域名下的总Cookie数量(一般20个以内)也有限制。

作用
①cookie一般用于储存少量的不太敏感的数据。
②在不登录的情况下,完成服务器对客户端的身份识别。可以理解为,浏览器将用户的一些“个性化设置”保存到cookie中,用户一旦使用,浏览器就可以读取cookie获取用户的“个性化设置”。

(1)一次可不可以发送多个Cookie?可以

创建多个Cookie对象,使用response调用多次addCookie()方法发送Cookie即可。
在这里插入图片描述

(2)Cookie在浏览器中保存多长时间?

①默认情况下,当浏览器关闭后,Cookie数据被销毁。在这里插入图片描述
②可以设置Cookie的生命周期,来达到持久化储存,即关闭浏览器后Cookie数据依旧存在。
setMaxAge(int seconds);

seconds的取值描述
正数设置Cookie的存活时间,并将Cookie数据写到硬盘的文件中
负数默认值,即浏览器关闭后,Cookie数据被销毁
0特殊值,删除Cookie信息

在这里插入图片描述

(3)Cookie能否储存中文?

①在Tomcat 8之前Cookie不能直接储储存中文数据。需要将中文数据进行转码后储存,一般采用URL编码(%E4)。
②Tomcat 8之后支持储存中文数据,但不支持特殊字符。

// 使用URL编码后的codeStr 
codeStr = URLEncoder.encode(str,"utf-8");
// 使用URL解码后的
decodeStr = URLDecoder.decode(value,"utf-8");
(4)Cookie获取范围多大?

问题:假设在一个Tomcat服务器中,部署了多个Web项目,name在这些Web项目中Cookie能否共享数据?
答案:默认情况下Cookie不能共享数据。因为其中setPath(String path)方法设置了Cookie的获取范围,该方法的默认是当前虚拟目录(当前Web项目),所以默认情况下Cookie不能共享数据。
但如果想要Cookie共享数据,则可以将该方法路径设置为setPath("/")即可,/表示根目录。
在这里插入图片描述
问题:假设不同的Tomcat服务器间Cookie能否共享?
答案:可以。使用setDomain(String path)方法,如果设置一级域名相同,那么多个Tomcat服务器之间Cookie可以共享。
例如setDomain(".baidu.com"),那么tieba.baidu.com和new.baidu.com之间Cookie可以共享。

3.Session

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

3.1.Session快速入门

Session的实现原理:Session是依赖于Cookie来实现。

使用步骤
(1)获取HttpSession对象,HttpSession session = request.getSession()
(2)使用HttpSession对象,见下表:

描述方法返回类型
获取Session对象中以name为键的值getAttribute(String name)object
存储以name为键的value值到Session对象setAttribute(String name, Object value)void
删除Session对象中以name为键的值removeAttribute(String name)void
// 获取Session对象
HttpSession session = request.getSession();
// 储存数据
session.setAttribute("msg","Hello Session");
// 读取数据
Object msg = session.getAttribute("msg");
System.out.println(msg);
// 删除数据
session.removeAttribute("msg");

在这里插入图片描述

3.2.Session的特点及使用细节

特点
①Session用于存储一次会话中多次请求的数据,存储存在服务器端。
②Session可以存储任意类型,任意大小的的数据。
③Session数据具有安全性。

(1)当客户端关闭后,服务器不关闭,两次获取的Session是否为是同一个?

答案:默认情况下不是同一个。
如果想要是同一个的话,可以创建一个键为JSESSIONID的Cookie,并设置最大存活时间,让Cookie持久化保存。这样,在使用的时候我们去读取这个JSESSIONID的Cookie即可。
在这里插入图片描述

(2)客户端不关闭,服务器关闭后,两个Session是否是同一个?

答案:不是同一个,服务器关闭后,Session对象会被销毁。
虽然两个Session不是同一个,但我们要确保这Session里保存的数据不丢失。

这里引申Session的钝化和活化两个概念。
钝化: 在服务器正常关闭之前,将Session对象序列化到硬盘上。
活化:在服务器启动后,将Session文件转化为(反序列化)内存中的Session对象。
Tomcat服务器可以自己去将Session自动钝化和活化。
在这里插入图片描述

(3)Session什么时候被销毁?

①服务器关闭时,Session被销毁。
②调用invalidate()方法销毁Session。
③Session默认30分钟后失效,这个失效时间可以自己配置。

演示配置Session失效时间:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值