javaWeb基础之Cookie
Posted 知道什么是码怪吗?
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaWeb基础之Cookie相关的知识,希望对你有一定的参考价值。
运行环境
系统:windows
服务器:Tomcat 8.0.50
IDEA:2021.3版本
目录
什么是Cookie?
Cookie是服务器通知客户端保存键值对的一种技术,客户端有了Cookie之后,每次请求都发送给服务器,并且每个Cookie的大小不能超过4kb。
Cookie的创建
protected void creatCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
//创建cookie对象
Cookie cookie1 = new Cookie("key1", "value1");
Cookie cookie2 = new Cookie("key2", "value2");
Cookie cookie3 = new Cookie("key3", "value3");
//通知客户端保存cookie
resp.addCookie(cookie1);
resp.addCookie(cookie2);
resp.addCookie(cookie3);
Cookie的获取
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
//获取所有的Cookie
Cookie[] cookies = req.getCookies();
//遍历输出到页面上
for (Cookie cookie : cookies)
//resp.getWriter().write("Cookie[" + cookie.getName() + "] = " + cookie.getValue() + "<br>");//输出到网页
System.out.println("Cookie[" + cookie.getName() + "] = " + cookie.getValue());//输出到控制台
获取特定的Cookie
//查找指定名称的Cookie对象,找到了返回Cookie,没找到返回null
public static Cookie findCookie(String name, Cookie[] cookies)
if (name == null || cookies == null || cookies.length == 0)
return null;
for (Cookie cookie : cookies)
if (name.equals(cookie.getName()))
return cookie;
return null;
Cookie的修改
protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
//和要修改的Cookie具有相同的key
Cookie cookie = new Cookie("key1", "newValue1");
//直接添加,有则覆盖,无责创建
resp.addCookie(cookie);
Cookie的删除
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
//首先找到要删除的Cookie
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
//将其时间设置为0
if (cookie != null)
cookie.setMaxAge(0);
//然后再将这个Cookie加入进去
resp.addCookie(cookie);
Cookie生命控制
通过cookie.setMaxAge()方法可以设置Cookie的存活时间。
cookie.setMaxAge(0);//时间为0表示立即删除
cookie.setMaxAge(1234);//时间为整数表示存活的秒数,还能存活1234秒
cookie.setMaxAge(-1);//时间为负数表示关闭浏览器自动删除(默认值为-1)
Cookie有效路径
通过cookie.setPath();方法可以设置cookie发送到服务器的路径,通过此方法可以过滤哪些Cookie可以发送给服务器。
cookie.setPath(req.getContextPath());
Cookie的实际应用
平时登录网站时,登录成功之后,我们关闭浏览器再次登录时,用户名会自动记录在登录框。某些网站再次打开时不用输入用户名和密码就已经登录成功。
免用户名登陆简单样例
登录表单
<form action="http://localhost:8080/13_cookie_session/loginServlet" method="post">
用户名:<input type="text" name="username" value="$cookie.username.value"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
Servlet程序验证登录
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
String username = req.getParameter("username");
String password = req.getParameter("password");
if (username.equals("qwe111") && password.equals("111"))
Cookie usernameCookie = new Cookie("username", username);
Cookie passwordCookie = new Cookie("password", password);
usernameCookie.setMaxAge(60 * 60 * 24 * 7);//设置用户名保存时间为7天
resp.addCookie(usernameCookie);
resp.addCookie(passwordCookie);
System.out.println("登陆成功");
else
System.out.println("登陆失败");
再次打开网页时,用户名将会被记录在登录框中。
以上是关于javaWeb基础之Cookie的主要内容,如果未能解决你的问题,请参考以下文章