Cookie与Session

目录

一、Cookie与Session的关联

 二、Cookie

1、含义

2、Cookie的创建

3、Cookie的获取

4、Cookie值的修改

5、Coookie生命控制

三、Session

1、session(会话)的含义

2、session的创建与获取

    3、Session域中数据的存取

4、Session的生命周期


一、Cookie与Session的关联

 二、Cookie

1、含义

1.1、服务器通知客户端保存键值对的一种技术

1.2、客户端有了Cookie后,每次请求都发送给服务器

1.3、每个Cookie的大小不超过4kb

2、Cookie的创建

public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决响应中文乱码问题
        resp.setContentType("text/html;charset=UTF-8");

        //1、创建Cookie对象
        Cookie cookie1=new Cookie("key1","value1");
        Cookie cookie2=new Cookie("key2","value2");
        Cookie cookie3=new Cookie("key3","value3");
        //2、通知客户端保存Cookie
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);
        resp.addCookie(cookie3);
        resp.getWriter().write("cookie创建成功");
    }
}

3、Cookie的获取

3.1、获取全部的cookie

//解决响应中文乱码问题
        resp.setContentType("text/html;charset=UTF-8");

        Cookie[] cookies=req.getCookies();
        for(Cookie cookie:cookies){
            resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"]<br/>");
        }

3.2、获取某一个cookie的值

public class CookieUtils {
    public static Cookie findCookie(String name,Cookie[] cookies){
        if(name==null||cookies==null||cookies.length==0){
            return  null;
        }
        for(Cookie cookie:cookies){
            if(name.equals(cookie.getName())){
                return cookie;
            }
        }
        return null;
    }
}

4、Cookie值的修改

方案一:

1、创建一个新的Cookie对象(同名不同值)

2、通知客户端保存Cookie

//1、创建新的Cookie对象(同名不同值)
        Cookie cookie1=new Cookie("key1","newValue1");
        //2、通知客户端保存Cookie
        resp.addCookie(cookie1);
        resp.getWriter().write("新的cookie1已修改好");

方案二:

1、先查找需要修改的Cookie对象

2、调用setValue()方法赋予新的Cookie值

3、通知客户端保存Cookie

//1、查找需要修改的cookie对象
        Cookie cookie=CookieUtils.findCookie("key2",req.getCookies());
        //2、调用setValue()方法赋予新的cookie值
        cookie.setValue("newValue2");
        //3、通知客户端保存修改的cookie值
        resp.addCookie(cookie);

注意:cookie的值不支持中文、空格、括号等,若需使用需加上BASE64编码操作

5、Coookie生命控制

含义:Cookie 什么时候被删除

setMaxAge()

        正数:表示在指定秒数后过期

        负数:默认值是-1,表示浏览器一关Cookie值就会被删除

        0:马上删除

//1、创建cookie对象
        Cookie cookie=new Cookie("key","value");
        //2、调用setMaxAge()方法设置过期时间
        cookie.setMaxAge(2000);
        //3、通知客户端保存cookie
        resp.addCookie(cookie);

6、Cookie有效路径Path的设置

Cookie的属性可以有效过滤Cookie哪些可以发送给服务器,哪些不发

CookieA                path=/工程路径

CookieB                path=/工程路径/abc

请求地址如下:

        http://ip:port/工程路径/a.html

                CookieA 发送

                 CookieB 不发送

        http://ip:port/工程路径/abc/a.html             

                       CookieA 发送

                       CookieB 发送

cookie.setPath("工程路径");

三、Session

1、session(会话)的含义

1.1、是一个接口

1.2、用来维护一个客户端与服务器之间关联的一种技术

1.3、每个客户都有自己的一个session会话

1.4、session会话中,我们常用来保存用户登录之后的信息

2、session的创建与获取

request.getSession():  第一次调用是创建,之后调用是获取

getId():    每个session都有唯一的id值

isNew():      判断是不是刚创建的

//解决响应中文乱码问题
        resp.setContentType("text/html;charset=UTF-8");
        //创建和获取Session对象
        HttpSession session = req.getSession();
        //判断当前Session对话,是否是新建的
        boolean isNew = session.isNew();
        //获取session对话唯一的id值
        String id = session.getId();
        resp.getWriter().write("id值为:"+id+"<br/>");
        resp.getWriter().write("是否新建+"+isNew);

    3、Session域中数据的存取

req.getSession().setAttribute("key1","value1");
        Object attribute = req.getSession().getAttribute("key1");
        resp.getWriter().write("从Session域中获取key1的数据是"+attribute);

4、Session的生命周期

setMaxInactiveInterval(int interval):设置以秒为单位的过期时间,超过时间会被销毁

getMaxInactiveInterval():        获取Session的超过时间

invaildate():                让当前对话马上超时无效

Session 的默认时间是30分钟

生命周期的修改方法:

1、修改自己工程下的web.xml配置文件中的<session-timeout>属性值

2、修改某个session的时长,使用setMaxInactiveInterval(int interval)

HttpSession session = req.getSession();
        session.setMaxInactiveInterval(3);

 3、设置当前对话马上失效

HttpSession session = req.getSession();
        session.invalidate();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值