文章目录
- 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
3.创建Cookie
3.1.Cookie的API
3.2.代码示例
//创建CookieCookie ck=new Cookie("code", code);
ck.setPath("/");//设置Cookie的路径
ck.setMaxAge(-1);//内存存储,取值有三种:>0有效期,单位秒;=0失效;<0内存存储
response.addCookie(ck);//让浏览器添加Cookie
4.获取Cookie
//获取所有的CookieCookie[] cks=request.getCookies();
//遍历Cookie
for(Cookie ck:cks){
//检索出自己的Cookie
if(ck.getName().equals("code")){
//记录Cookie的值
code=ck.getValue();
break;
}
}
5.如何修改Cookie
只需要保证Cookie的名和路径一致即可修改
//创建CookieCookie 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字符进行编码,否则会出现乱码,存储会异常!
编码使用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.功能分析
一般的网站只提供记住用户名操作,如果提供自动登录功能,一般给出安全提示,因为cookie数据保存在客户端的磁盘中,不安全,因此像银行账号和密码等之类的敏感数据一般不往cookie中保存.
10.总结
1.Cookie数据保存在客户端(磁盘中)
2.每个浏览器cookie的大小和个数有限制,而且限制数不太一样
3.浏览器之间cookie数据不能共享
4.由于cookie数据保存在本地磁盘中,因此存在安全隐患,因此应该尽量避免使用Cookie保存重要的敏感数据,如果非要保存,需要对保存的数据进行某些可逆加密算法进行加密,只要这个加密和解密的工具不泄露,就意味着数据是安全的!对于密码之类的数据,使用不可逆加密进行处理!