当前位置 : 主页 > 编程语言 > java >

JavaWeb开发专题(七)-会话技术之Cookie

来源:互联网 收集:自由互联 发布时间:2022-07-04
文章目录 ​​1.会话技术是什么​​ ​​2.Cookie是什么?​​ ​​3.创建Cookie​​ ​​3.1.Cookie的API​​ ​​3.2.代码示例​​ ​​4.获取Cookie​​ ​​5.如何修改Cookie​​ ​​6.Cooki


文章目录

  • ​​1.会话技术是什么​​
  • ​​2.Cookie是什么?​​
  • ​​3.创建Cookie​​
  • ​​3.1.Cookie的API​​
  • ​​3.2.代码示例​​
  • ​​4.获取Cookie​​
  • ​​5.如何修改Cookie​​
  • ​​6.Cookie的生存时间​​
  • ​​7.Cookie的编码与解码​​
  • ​​8.Cookie的使用场景​​
  • ​​9.Cookie案例--记住用户名​​
  • ​​9.1.功能分析​​
  • ​​10.总结​​

1.会话技术是什么

在日常生活中,从拨通电话到挂断电话之间,一连串的你问我答的过程就是一个会话。而在Web应用中,会话指的是从使用浏览器打开某个网站到关闭浏览器之间,一连串的(浏览器)请求和(服务器)响应的过程。类似于生活中的打电话过程。

会话过程中存在哪些问题?

在打电话过程中,通话双方会有通话内容,同样,在浏览器与服务器端交互的过程中,也会产生一些数据。例如,在购物网站中,有甲、乙两个用户,甲购买了一个iPhone X,乙购买了一个iPad,服务器需要对他们的购买数据进行分别保存,同样,在结账时,服务器需要判断结账的用户是甲还是乙,以便能够取出对应数据。那么问题来了!服务器如何识别用户的身份?

会话技术,是识别用户身份的技术,包括两种:

Cookie技术 — 将用户的身份数据保存在客户端
Session技术 — 将用户的身份数据保存在服务器

2.Cookie是什么?

生活场景:在现实生活中,某些理发店、美容院、商城等实体店,经常会推荐顾客办理或赠送顾客一张会员卡,卡上记录了用户的个人信息(姓名、手机号等)、余额、积分等数据,如果顾客办理了会员卡,以后每次光临这些实体店时,都会携带这张会员卡,实体店也将根据会员卡的类型、消费金额等给顾客相应的优惠。

在Web应用中,Cookie类似于这张会员卡,详细的对应关系如下:

实体店 <------> 服务器
顾客 <-------> 浏览器
会员卡 <-------> Cookie(身份标识)

顾客第一次光临实体店,没有会员卡 <-------> 浏览器第一次访问服务器,没有cookie
实体店办理会员卡,发给顾客 <-------> 服务器创建Cookie,发给浏览器
顾客把会员卡保存在? <-------> 浏览器把Cookie保存在客户端的磁盘中
顾客以后光临实体店,带上会员卡 <-------> 浏览器以后访问服务器,自动带上Cookie
实体店根据会员卡给顾客相应的优惠 <-------> 服务器根据Cookie(识别用户的身份)给浏览器相应的响应

WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。
一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB

JavaWeb开发专题(七)-会话技术之Cookie_数据保存

3.创建Cookie

3.1.Cookie的API

JavaWeb开发专题(七)-会话技术之Cookie_数据_02
JavaWeb开发专题(七)-会话技术之Cookie_服务器_03

3.2.代码示例

//创建Cookie
Cookie ck=new Cookie("code", code);
ck.setPath("/");//设置Cookie的路径
ck.setMaxAge(-1);//内存存储,取值有三种:>0有效期,单位秒;=0失效;<0内存存储
response.addCookie(ck);//让浏览器添加Cookie

4.获取Cookie

//获取所有的Cookie
Cookie[] cks=request.getCookies();
//遍历Cookie
for(Cookie ck:cks){
//检索出自己的Cookie
if(ck.getName().equals("code")){
//记录Cookie的值
code=ck.getValue();
break;
}
}

5.如何修改Cookie

只需要保证Cookie的名和路径一致即可修改

//创建Cookie
Cookie ck=new Cookie("code", code);
ck.setPath("/");//设置Cookie的路径
ck.setMaxAge(-1);//内存存储,取值有三种:>0有效期,单位秒;=0失效;<0内存存储
response.addCookie(ck);//让浏览器添加Cookie

6.Cookie的生存时间

ck.setMaxAge(-1);设置生成时间
取值说明:
>0有效期,单位秒
=0失效
<0内存存储

7.Cookie的编码与解码

中文和英文字符不同,中文属于Unicode字符,在内存中占用4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会出现乱码,存储会异常!
JavaWeb开发专题(七)-会话技术之Cookie_服务器_04

编码使用java.net.URLEncoder类的encode(String str,String encoding)方法
解码使用java.net.URLDecoder类的decode(String str,String encoding)方法

代码如下:

保存:Servlet类

// 使用中文的 Cookie. name 与 value 都使用 UTF-8 编码.
Cookie cookie = new Cookie(
URLEncoder.encode("姓名", "UTF-8"),
URLEncoder.encode("老刘", "UTF-8"));
// 发送到客户端
response.addCookie(cookie);

读取:jsp页面

<%
if(request.getCookies() != null){
for(Cookie cc : request.getCookies()){
String cookieName = URLDecoder.decode(cc.getName(), "UTF-8");
String cookieValue = URLDecoder.decode(cc.getValue(), "UTF-8");
out.println(cookieName + "=");
out.println(cookieValue + "; <br/>");
}
}
%>

8.Cookie的使用场景

1.商品的浏览记录
2.记住用户名
3.免登陆
4.显示上次登录系统的时间

9.Cookie案例–记住用户名

9.1.功能分析

JavaWeb开发专题(七)-会话技术之Cookie_数据_05
一般的网站只提供记住用户名操作,如果提供自动登录功能,一般给出安全提示,因为cookie数据保存在客户端的磁盘中,不安全,因此像银行账号和密码等之类的敏感数据一般不往cookie中保存.

10.总结

1.Cookie数据保存在客户端(磁盘中)
2.每个浏览器cookie的大小和个数有限制,而且限制数不太一样
JavaWeb开发专题(七)-会话技术之Cookie_数据_06
3.浏览器之间cookie数据不能共享
4.由于cookie数据保存在本地磁盘中,因此存在安全隐患,因此应该尽量避免使用Cookie保存重要的敏感数据,如果非要保存,需要对保存的数据进行某些可逆加密算法进行加密,只要这个加密和解密的工具不泄露,就意味着数据是安全的!对于密码之类的数据,使用不可逆加密进行处理!


上一篇:JavaWeb开发专题(五)-Servlet开发入门
下一篇:没有了
网友评论