JavaWeb的Cookie和Session

package study.web.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/cookie/demo01")
public class demo01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    /**
     * 客户端会话技术:Cookie
     * 实现原理:
     *      基于响应头set-cookie和请求头cookie实现
     * Cookie的特点和作用:
     *      cookie存储数据在客户端浏览器
     *      浏览器对于单个 cookie 的大小有限制在 4kb 以内, 对同一个域名下的总cookie数量也有限制(20个)
     * Cookie默认关闭客户端后失效
     * @param request
     * @param response
     */
    public static void CookieDemo(HttpServletRequest request, HttpServletResponse response) {
        //创建Cookie对象
        Cookie c = new Cookie("msg", "hello Cookie");

        //设置Cookie作用域范围(将作用域设置为根路径,同一个服务器的多个项目可以共享cookie)
        //该设置项默认为当前项目的作用域
        c.setPath("/");
        //设置Cookie过期时间
        //设置正数 表示x秒后过期
        //设置0,表示立即过期
        c.setMaxAge(300);
        //设置cookie的域名作用域(将作用域设置为域名,多个子域名可以共享cookie)
        //c.setDomain();
        //发送Cookie
        response.addCookie(c);

        //获取Cookie
        Cookie[] cook = request.getCookies();
        //获取数据,遍历Cookies
        if(cook != null){
            for (Cookie cs : cook) {
                String name = cs.getName();
                String value = cs.getValue();
                System.out.println(name+":"+value);
            }
        }
    }

    /**
     * 服务器端会话技术:Session
     * 实现原理:
     *      Session的实现是依赖于Cookie的。
     *  问题:
     *      当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
     *          默认情况下。不是。
     *          如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
     *
     *  当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
     *             默认情况下。不是。
     *             如果需要相同,可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存
     *
     *  Session什么时候失效:
     *      服务器关闭
     *      调用session.invalidate()方法
     *      默认30分钟失效
     * @param request
     * @param response
     */
    public static void SessionDemo(HttpServletRequest request, HttpServletResponse response) {
        //使用Session共享数据

        //获取session
        HttpSession session = request.getSession();
        //存储数据
        session.setAttribute("msg","hello Session");

        //获取数据
        session.getAttribute("msg");

        //删除数据
        session.removeAttribute("msg");

        //期望客户端关闭后 session也能相同(持久化)
        Cookie c = new Cookie("JSESSINOID", session.getId());
        c.setMaxAge(60 * 60);//一小时
        //发送cookie
        response.addCookie(c);



    }
}

仅有一条评论

添加新评论