Cookie
1、cookie是服务器通知客户端保存键值对的一种技术
2、客户端有了cookie后,每次请求都发给服务器
3、每个cookie大小不能超过4kb
Cookie 主要用于下面三个目的
- 会话管理
登陆、购物车、游戏得分或者服务器应该记住的其他内容
- 个性化
用户偏好、主题或者其他设置
- 追踪
记录和分析用户行为
创建cookie
Cookie cookie = new cookie(“key”,“value”)
cookie通过http协议的响应头中的Set-cookie将键值对传入浏览器。
public class cookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
createCookie(req,resp);
}
/**
* 创建cookie
*/
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建cookie对象
Cookie cookie = new Cookie("key1","value1");
//通知浏览器保存cookie
resp.addCookie(cookie);
//提示用户
resp.getWriter().println("浏览器保存cookie成功");
}
}
服务器获取客户端的cookie:
获取cookie方法:request.getCookies()
获取cookie对象的key:cookie对象.getName();
获取cookie对象的value:cookie对象.getValue();
Cookie值的修改:
方法一:
1、先创建一个要修改的同名的Cookie对象
2、在构造器同时赋予新的Cookie值
3、调用response.addCookie(Cookie)
新的同名Cookie会覆盖原有Cookie值
方法二:
1、先查找到要修改的Cookie对象
2、调用setValue()方法赋予新的值
3、调用response.addCookie()通知客户端保存修改
Cookie生命控制:
setMaxAge()
正数,表示在指定秒数后过期
负数,表示浏览器一关,Cookie就会被删除(默认是-1)
零,表示马上删除Cookie,可以通过设置生命周期为0来删除cookie。
Cookie key1 = CookieUtil.findCookie(request.getCookies(), "key1");
key1.setMaxAge(0);
response.addCookie(key1);
Cookie key2 = CookieUtil.findCookie(request.getCookies(), "key2");
key1.setMaxAge(0);
response.addCookie(key2);
若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。
案例(免用户名登录)
第一次登录的时候输入用户名和密码,如果第一次登录成功的话,下一次登录的时候就不用输入用户名(有效期为一周)<br />LoginCookie.java
public class LoginCookie extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
toLogin(req,resp);
}
public void toLogin(HttpServletRequest req, HttpServletResponse resp) {
//接受用户名和密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//在第一次登录成功后,再次登录时需要对用户名回显
Cookie cookieUsername = CookieUtil.findCookie(req.getCookies(), "username");
if (cookieUsername != null){
ServletContext servletContext = getServletContext();
//保存数据到域中
servletContext.setAttribute("username",cookieUsername.getValue());
}
//在用户名和密码匹配的情况下,将用户名数据保存到cookie
if(username.equals("shizi") && password.equals("123456")){
Cookie cookie = new Cookie("username", username);
//设置有效期
cookie.setMaxAge(60*60*24*7);
resp.addCookie(cookie);
//响应客户端登录成功
try {
resp.getWriter().println("登录成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录界面</title>
</head>
<body>
<h1 align="center"></h1>
<form action="http://localhost:8080/jsp_test/login" method="post">
<%--value="${username==null ? "" : username}"
判断是否为空,为空显示空,否则显示username--%>
用户名:<input type="text" name="username" value="${username==null ? "" : username}"><br>
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html>
[
](https://blog.csdn.net/tanyunlong_nice/article/details/47188659)