欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Cookie学习日记1

时间:2023-06-11

目录

一、状态管理

1.1 现有问题

1.2 概念

1.3 状态管理分类

二、cookie的使用

2.1 什么是cookie

2.2 创建cookie

 2.3 获取cookie

2.4 修改cookie

2.5 cookie编码与解码

2.6 cookie优点和缺点


一、状态管理

1.1 现有问题

HTTP协议是无状态的,不能保存每次提交的信息

如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系。

对于那些需要多次提交数据才能完成的Web操作,比如登录来说,就成问题了。

1.2 概念

将浏览器与web服务器之间多次交互当作一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来。

1.3 状态管理分类

客户端状态管理技术:将状态保存在客户端。代表性的是cookie技术。

服务器状态管理技术:将状态保存在服务器端。代表性的是session技术(服务器传递sessionID时需要使用cookie的方式)和application

二、cookie的使用

2.1 什么是cookie

cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一小段数据。

一旦Web浏览器保存了某个cookie, 那么它在以后每次访问该Web服务器时,都应在HTTP请求头中将这个cookie回传给Web服务器。

一个cookie主要由标识该信息的名称(name) 和值(value) 组成。

2.2 创建cookie

1、创建

package com.ha.cookie;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class cookieServlet extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、服务端创建cookie对象 cookie cookie = new cookie("username", "HuAn"); // 2、将cookie响应给客户端 resp.addcookie(cookie); }}

<?xml version="1.0" encoding="UTF-8"?> ck com.ha.servlet.cookieServlet ck /ck

2、查看

运行并访问这个网页

(1)查看方式一:

响应头里面有响应的cookie

(2)查看方式二

 

3、补充

(1)设置访问路径

 

(2)设置客户端cookie有效时间

(3)设置多个cookie

 2.3 获取cookie

package com.ha.cookie;import javax.servlet.ServletException;import javax.servlet.http.*;import java.io.IOException;import java.net.URLDecoder;public class GetServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.通过request对象获取所有的cookie cookie[] cookies = req.getcookies(); //2.通过循环遍历cookie if(cookies!=null){ for(cookie cookie : cookies){ System.out.println(URLDecoder.decode(cookie.getName(),"UTF-8") +":"+URLDecoder.decode(cookie.getValue(),"UTF-8")); } } } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); }}

 

2.4 修改cookie

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

cookie cookie = new cookie("username", "Tom");cookie.setPath("/myweb");cookie.setMaxAge(60*60);resp.addcookie(cookie);


注意:如果改变cookie的name和有效路径会新建cookie,而改变cookie值、 有效期会覆盖原有cookie

2.5 cookie编码与解码

cookie默认不支持中文,只能包含ASCII字符, 所以cookie需要对Unicode字符进行编码,否则会出现乱码。

编码可以使用java.net.URLEncoder类的encode(String str, String encoding)方法

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

 

 

2.6 cookie优点和缺点

1、优点:

        可配置到期规则。

        简单性: cookie 是一种基于文本的轻量结构,包含简单的键值对。

        数据持久性: cookie默认在过期之前是可以一-直存在客户端浏览器上的

2、缺点:

        大小受到限制:大多数浏览器对cookie的大小有4K、8K字 节的限制。

        用户配置为禁用:有些用户禁用了浏览器或客户端设备接收cookie的能力,因此限制了这一功能。

        潜在的安全风险: cookie 可能会被篡改。会对安全性造成潜在风险或者导致依赖于cookie的应用程序失败。 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。