Cookie和Session

本文介绍了Cookie和Session的基本概念及使用方法。通过Java Servlet实现Cookie的增加、查询、修改和删除,以及Session的创建、读取和删除操作。强调了它们在存储用户状态和信息安全方面的作用,并提醒注意Cookie的大小和时效限制。
摘要由CSDN通过智能技术生成

Cookie

概述

Cookie 英文饼干,cookie 是一小段数据,用来存储客户的信息
数据特点:
以key :value 键值对形式存储
cookie 大部分是服务器产生,通过response 返回,浏览器保存
(cookie 服务器产生,浏览器保存,下次请求路径是在header中携带cookie)
cookie有大小限制 4k
cookie 有时间限制 默认 30min
cookie 不能存储敏感信息(密码等)

谷歌浏览器无痕模式(禁用cookie)
在这里插入图片描述

增加cookie

package com.qfedu.cookie;

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;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-16:57
 */
@WebServlet("/AddCookie")
public class AddCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");

        //创建cookie
        Cookie cookie = new Cookie("name", "chenmotong");

        //设置携带cookie的路径,不写则全部携带

        //设置cookie的最大存活时间
        cookie.setMaxAge(60);

        //添加cookie
        resp.addCookie(cookie);

        resp.getWriter().print("向前端返回了一个cookie");


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

查询cookie

package com.qfedu.cookie;

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;
import java.io.IOException;
import java.net.URLDecoder;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-17:01
 */
@WebServlet("/GetCookie")
public class GetCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");

        //获取cookie并放入数组
        Cookie[] cookies = req.getCookies();

        for (Cookie cookie : cookies) {
            resp.getWriter().println(cookie.getName());
            resp.getWriter().println(cookie.getValue());

            //后端无法获取存活时间,结果恒为-1
            resp.getWriter().println(cookie.getMaxAge());
        }

        resp.getWriter().println("后端获取到了cookie");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

修改cookie

package com.qfedu.cookie;

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;
import java.io.IOException;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-17:05
 */
@WebServlet("/EditorCookie")
public class EditorCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");

        Cookie[] cookies = req.getCookies();

        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("name")) {
                cookie.setValue("duolaAmeng");

                cookie.setMaxAge(60);

                resp.addCookie(cookie);
            }
        }

        resp.getWriter().println("修改了cookie");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

删除cookie

package com.qfedu.cookie;

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;
import java.io.IOException;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-17:09
 */
@WebServlet("/DeleteCookie")
public class DeleteCookie extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");

        Cookie[] cookies = req.getCookies();

        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("name")) {
                cookie.setMaxAge(0);
            }
        }

        resp.getWriter().println("删除了cookie");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

Session

概述:

Session 就是会话,会话就是浏览器和服务器保持的链接一种形式
主要作用就是记录用户的状态,记录用户相关的信息

特点:
①存储在服务端
②也是以键值对存储,值可以是任何类型
③会话也有时间限制(如果用户长时间没有访问,则会话会自动删除)
④浏览器关闭,会话结束,如果浏览器重新打开,则是新的会话
sesssion 的安全性相对较高

增加session

package com.qfedu.cookie.session1;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-20:01
 */
@WebServlet("/CreateSession1")
public class CreateSession1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        HttpSession session = req.getSession();

        session.setAttribute("username","chenmotong");

        session.setMaxInactiveInterval(60);

        resp.getWriter().println("sessionid:" + session.getId());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

查询session

package com.qfedu.cookie.session1;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-20:02
 */
@WebServlet("/GetSession1")
public class GetSession1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        HttpSession session = req.getSession();

        String username = (String)session.getAttribute("username");

        resp.getWriter().println(username);
        resp.getWriter().println(session.getId());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

删除session

package com.qfedu.cookie.session1;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author xue_yun_xiang
 * @create 2021-04-12-20:03
 */
@WebServlet("/DeleteSession1")
public class DeleteSession1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        //第一种
        //session.setMaxInactiveInterval(0);

        //第二种
        session.invalidate();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值