Cookie存储到浏览器的内存中, 当浏览器关闭的时候浏览器的内存就会释放, 则Cookie被销毁
我们可以通过setMaxAge(int seconds)方法来设置Cookie存活时间
Cookie是不能直接存储中文的, 如果要存储中文, 就要进行一个转码: 一般情况我们都是转为URL编码
因为Cookie是基于Http协议实现的, 所以传输的时候是不能有中文数据的
Cookie中存储的数据只能是ACSII编码数据, 如果存储其他数据的时候要进行一个对应的编码, 一般就编码为URL或者UTF-8都是可以的
package com.ffyc.demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
@WebServlet("/main3")
public class MainServlet3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建Cookie对象, 设置数据
//这个时候我们使用Cookie传输了一个中文数据, 由于我们的HTTP协议中不能直接传输中文数据, 所以我们要进行一个URL编码之后再发送
String name = "张三";
URLEncoder.encode(name,"utf-8"); //我们一定要是指定为utf-8编码字符集, 因为我们客户端解析的时候就是以utf-8形式的url形式对中文数据进行一个解析
Cookie cookie = new Cookie("name",name);
//发送cookie到客户端, 使用response对象
resp.addCookie(cookie);
}
}
* ##### 然后接收的时候我们也要使用utf-8形式下的URL解码方式进行一个解码
```java
package com.ffyc.demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
@WebServlet("/main4")
public class MainServlet4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取从客户端发送过来的Cookie对象[]
Cookie[] cookies = req.getCookies();
//使用增强for循环遍历cookies数组
for (Cookie c :
cookies) {
String name = c.getName();
//判断如果是我们要查询的键的时候才继续去进入到if判断中, 获取出对应的值, 然后打印输出到控制台
if ("name".equals(name)) {
//这个时候我们要对对应的URL编码值进行一个解码操作
String value = URLDecoder.decode(c.getValue(),"utf-8");
System.out.println(name + ":" + value);
}
}
}
对于请求体和响应体中的数据都是使用二进制流的形式进行传输的, 对于请求体和响应体中如果有中文数据的时候我们只需要设置对应的流采用的字符集就可以了
我们其实可以发现: 很多时候取值的时候如果是正数和负数之间取值的时候都是负数为默认值