黑马程序员技术交流社区

标题: 【西安校区】Servlet的Cookie对象 [打印本页]

作者: 逆风TO    时间: 2019-12-12 10:59
标题: 【西安校区】Servlet的Cookie对象
Cookie的介绍:
Cookie 定义:Cookie 用于浏览器端的数据存储,解决了不同请求之间需要数据共享的问题。例如,可以将用户的登录信息接收并设置为Cookie,对其进行相关操作以使得用户在特定时间内向某服务器发送请求时,无需再次输入这些数据。
Cookie 应用场景:记住密码、特定期限内免登录等。
Cookie 数据存储:Cookie 把指定的数据存储在浏览器端,向服务器发送请求时,自动将该数据添加在请求数据中

临时存储:不设置 cookie 信息的存储时间,一次会话内有效,存储在浏览器内存中
定时存储:设置存储时间,周期为时间的设置,存储在浏览器端本地磁盘中
Cookie的使用:
Cookie 对象的创建:

//new Cookie(键, 值);
Cookie ck = new Cookie("password", "123456");
Cookie 对象有效期的设置:

//值以秒为单位,例:设置有效期为一天
ck.setMaxAge(1*24*3600);

设置请求特定url时将Cookie 对象添加进请求数据中:

//设置cookie的有效路径,值为url端口号之后的内容,即uri
ck.setPath("/sxt/ccc");

Cookie 对象的添加,第一次响应时向浏览器端发送该Cookie 对象:

response.addCookie(ck);

Cookie 对象的获取:

//获取cookie组成的数组
Cookie[] cookies = request.getCookies();
//遍历cookie:由于可能没有cookie,为了防止空指针异常,要进行判断
if (cookies != null) {
        for (Cookie cookie : cookies) {
                System.out.println(cookie.getName() + ":" + cookie.getValue());
        }
}

例:
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 {
        private static final long serialVersionUID = 1L;

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                Cookie ck = new Cookie("password","123456");
                ck.setMaxAge(1*24*3600);
                ck.setPath("/cookie/cs");
                response.addCookie(ck);
        }
}

第一次向该servlet发送请求时,请求数据中没有设置的cookie“password”,而响应数据中出现了设置的cookie“password”:

由于指定了cookie的uri(即使是无效的uri),所以向指定的uri发送请求时,响应头中没有了cookie,而请求头中出现了cookie;由于制定了一天内有效,所以即使重启浏览器,向该uri发送请求时,请求头中依然有cookie:

如果要人为清除设置的没到期限的cookie,清除浏览器的历史记录即可







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2