Cookie

来源:互联网 发布:网络戾气太重 编辑:程序博客网 时间:2024/06/16 02:11

一、引入

cookie 是将服务器端的数据保存到浏览器端的技术,当用户再次请求服务器时,将浏览器端存储的数据带到服务器。

二、Cookie的创建及读取

创建Cookie

package com.jingxin.servlet;import java.io.IOException;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;@WebServlet("/SetCookieServlet")public class SetCookieServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //创建Cookie        Cookie cookie = new Cookie("name", "jingxin");        //通知服务器保存Cookie        response.addCookie(cookie);    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

服务器获取浏览器发送过来的Cookie

package com.jingxin.servlet;import java.io.IOException;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;@WebServlet("/GetCookieServlet")public class GetCookieServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //获取浏览器发送过来的Cookie        Cookie[] cookies = request.getCookies();        //判断是否有Cookie        if(cookies!=null) {            //遍历Cookie            for(Cookie cookie : cookies) {                String name = cookie.getName();                String value = cookie.getValue();                //do something with name and value                response.getWriter().append("cookie:"+name+"   "+value);            }        }    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

三、Cookie的持久化

1、设置Cookie的有效时间(会将Cookie保存在硬盘)

cookie.setMaxAge(int expiry);

expir 为cookie的有效时间 单位为秒,若为负数表示浏览器不保存Cookie,若为0表示删除同名Cookie

若未设置cookie的有效时间,cookie只保存在内存中,浏览器关闭时cookie也会随之删除

四、Cookie 的路径问题

客户端在保存Cookie时除了保存Cookie的名字和值,还会保存当前Cookie所在的目录,通过request。getCookies()方法只能获得当前Servlet所在目录的Cookie以及之前目录中的Cookie。

举例:假设当前Servlet所在目录为/demo1/a/b/AServlet 则利用request.getCookies()可以获得demo1、a、b目录下的Cookie

可以利用cookie.setPaht()和cookie.getPath()来设置和获取cookie的访问路劲。