【JAVAEE基础学习(9)】--简述Cookie 和 Session篇

Cookie(针对客户端)
一、基础知识:
    1.概念:
        Cookie 是服务器通知客户端保存键值对的一种技术。
        客户端有了 Cookie 后,每次请求都发送给服务器。
        每个 Cookie 的大小不能超过 4kb

    2.Cookie生命控制
        Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)

    3.Cookie有效路径Path的设置:
        Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器。哪些不发。
        path属性是通过请求的地址来进行有效的过滤。

二、cookie实例

{
    public class CookieServlet extends BaseServlet00 {


    /**
     * cookie的路径设置
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void pathCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        Cookie cookie = new Cookie("path1", "path1");

        //getContextPath()->得到工程路径
        cookie.setPath(req.getContextPath()+"/abc");//->/工程路径/abc
        resp.addCookie(cookie);
        resp.getWriter().write("创建了一个带有path路径的cookie");
    }


    /**
     * cookie的生命控制
     *  setMaxAge()
     *      正数,表示在指定的秒数后过期
     *      负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
     *      零,表示马上删除 Cookie
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void defaultLifeCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie=new Cookie("defalutLife","defalutLife");
        cookie.setMaxAge(-1);//设置存活时间
        resp.addCookie(cookie);
    }


    /**
     * 让cookie存活一段时间
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void keepLifeCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("life3600", "life3600");
        cookie.setMaxAge(60*3);//设置cookie在3分钟后被删除。无效。
        resp.addCookie(cookie);
        resp.getWriter().write("已经创建了一个存活3分钟的cookie");

    }


    /**
     * 马上删除cookie
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void defaultNowCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //找到目标cookie
        Cookie cookie=cookieUtils.findCookis("key1",req.getCookies());

        if(cookie!=null){
            //设置setMaxAge(0)
            cookie.setMaxAge(0);//马上删除
            resp.addCookie(cookie);

            resp.getWriter().write("key1的cookie已经被删除");
        }
    }



    /**
     * 修改cookie
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        //法一
//        //创建同名cookie对象
//        //在构造,同时赋予新的Cookie值
//        Cookie cookie = new Cookie("key1", "newValue1");
//        //调用response.addCookie(cookie)通知客户端保存修改
//        resp.addCookie(cookie);
//        resp.getWriter().write("key1的Cookie已经修改好");

        //方案二
        //先找到需要修改的cookie对象
        Cookie cookie = cookieUtils.findCookis("key2", req.getCookies());

        if(cookie!=null){
            //调用setValue()方法赋予新cookie值
            cookie.setValue("newValue2");
            //调用response.addCookie()通知客户端保存修改
            resp.addCookie(cookie);
        }


    }


    /**
     * 获取cookie
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取cookie对象
        final Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            //getName()返回cookie的key(名)
            //getValue()返回cookie的value(值)
            resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"] <br>");

        }

        Cookie targetCookie= cookieUtils.findCookis("key1",cookies);
//        for (Cookie cookie : cookies) {
//            if("key2".equals(cookie.getName())){
//                targetCookie=cookie;
//                break;
//            }
//        }

//        targetCookie如果不为0,则说明找到了需要的cookie
        if(targetCookie!=null){
            resp.getWriter().write("找到了需要的cookie");
        }

//        req.getCookies();
    }



    /**
     * 创建cookie
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void creatCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建cookie对象
        Cookie cookie = new Cookie("key1", "value1");
        //2.通知客户端保存cookie
        resp.addCookie(cookie);
        //1.创建cookie对象
        Cookie cookie1 = new Cookie("key2", "value2");
        //2.通知客户端保存cookie
        resp.addCookie(cookie1);

        resp.getWriter().write("cookie创建成功");

    }
    
}

Session(针对服务器端)
一、基础知识:
    1、概念:
        1、Session就一个接口(HttpSession)。
        2、Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
        3、每个客户端都有自己的一个Session会话。
        4、Session会话中,我们经常用来保存用户登录之后的信息。

    2.session的生命控制
        session的生命控制指的是如何管理session什么时候被销毁(删除)
        在tomcat中所有session默认的超时时长为30分钟,这是由tomcat服务器配置文件web.xml初始化配置的时间
        若要改变单次会话session的超时时间可以在程序中调用:getMaxInactiveInterval()方法。
        session超时指的是客户端两次请求的最大间隔时长

    3.技术实现:
        session技术底层是基于cookie技术实现的

二、session实例:

{
    public class SessionServlet extends BaseServlet00 {

        /**
         * 设置session马上超时
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取session对象;
            HttpSession session = req.getSession();

            //让session会话马上超时
            session.invalidate();

            resp.getWriter().write("session已经设置为超时(无效)");
        }

        /**
         * 设置session的超时时长,以3秒位例
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void defLifeTime(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取session对象;
            HttpSession session = req.getSession();

            //设置当前session在3秒后超时
            session.setMaxInactiveInterval(3);

            resp.getWriter().write("当前session已经设置为"+session.getMaxInactiveInterval()+"秒后超时");
        }


        /**
         * session默认的生命时长
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取session默认的超时时长
            int maxInactiveInterval = req.getSession().getMaxInactiveInterval();
            resp.getWriter().write("session默认的超时时长为:"+maxInactiveInterval+"秒");
        }


        /**
         * 向Session域中存储数据
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.getSession().setAttribute("key1","value1");
            resp.getWriter().write("已经向session中保存了数据");
        }

        /**
         *向Session域中获取数据
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Object attribute = req.getSession().getAttribute("key1");
            resp.getWriter().write("从session中获取出key1的数据是"+attribute);
        }

        /**
         * 创建或获取session会话
         * @param req
         * @param resp
         * @throws ServletException
         * @throws IOException
         */
        protected void creatOrGetSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //创建和获取会话对象
            HttpSession session = req.getSession();

            //判断当前session会话,是否是新创建出来的
            boolean isNew = session.isNew();

            //获取session会话的唯一标识
            String id = session.getId();

            resp.getWriter().write("得到的session,它的id是:"+id+"<br>");
            resp.getWriter().write("这个session是否是新创建的:"+isNew+"<br>");
        }
    }
}

以上是本篇小节,不喜勿喷,感谢理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值