Cookie的详解及示例

编程入门 行业动态 更新时间:2024-10-28 00:15:34

给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie可以被用户禁止
Cookie会将状态保存在浏览器端,不安全。对于敏感数据需要加密后再使用Cookie来保存
Cookie只能保存少量的数据,大约4kb左右
Cookie的个数是有限制的
Cookie只能保存字符串,且不能放中文字符串

不同的浏览器有不同的查看方式;以Chrome浏览器为例,点击URL前的 图标即可查看Cookie信息,例如:

或者右键检查元素

示例
需求:
1)运行TestCookieServlet,保存username和pwd信息到Cookie并返回到客户端.
2)再运行GetCookieServlet,获取Cookie并进行显示

TestCookieServlet:

// 创建cookie对象
Cookie username=new Cookie("username","Alice");
Cookie pwd=new Cookie("pwd","abc123");
// 将Cookie保存到响应中
response.addCookie(username);
response.addCookie(pwd);

在浏览器中访问TestCookieServlet,localhost:8080/chapter04/TestCookieServlet;
可以查看到locahost保存了两个Cookie信息到客户端:

GetCookieServlet:

// 获取当前请求中的所有Cookie对象
Cookie[] cookies=request.getCookies();
// 输出所有Cookie的名字和值
if(cookies==null){
out.println("没有Cookie。");
return;
}
for(Cookie c:cookies){
out.println(c.getName()+"="+c.getValue());
}

4.设置cookie生存时间

修改TestCookieServlet

// 创建cookie对象
Cookie username=new Cookie("username","Alice");
Cookie pwd=new Cookie("pwd","abc123");
// 设置cookie的生命时间,24小时内有效
username.setMaxAge(24*3600);
pwd.setMaxAge(24*3600);
// 将Cookie保存到响应中
response.addCookie(username);
response.addCookie(pwd);

先运行TestCookieServlet,保证Cookie信息保存到客户端;
再运行GetCookieServlet,获取Cookie并进行显示;

将时间调到24小时后,再次访问GetCookieServlet,发现Cookie已经不存在

如果没有使用setMaxAge方法设置最大生命时间的Cookie,则浏览器关闭就失效;
5.解决cookie中文编码
cookie的值只能是ASCII字符;中文需要转换成ASCII码形式;使用
URLEncoder.encode()方法和URLDecoder.decode()方法实现。
EncodeServlet:

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//编码
String username = URLEncoder.encode("李想", "utf-8");
String country = URLEncoder.encode("中国", "utf-8");
//创建cookie
Cookie cookie1 = new Cookie("username", username);
Cookie cookie2 = new Cookie("country", country);
//添加响应的cookie
response.addCookie(cookie1);
response.addCookie(cookie2);
}

DecodeServlet

	response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();Cookie[] cookies = request.getCookies();if(cookies!=null){for(Cookie cookie:cookies){String name = URLDecoder.decode(cookie.getName(), "utf-8");String value = URLDecoder.decode(cookie.getValue(), "utf-8");out.println(name+":");out.println(value+"<br/>");}}else{out.println("<h4>没有 cookies</h4>");}out.close();
}

访问encodeCookie,查看响应数据包

访问decodeCookie,查看页面输出

更多推荐

示例,详解,Cookie

本文发布于:2023-05-25 00:26:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/218675.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:示例   详解   Cookie

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!