第五章 JavaWEB专题之会话跟踪技术(Cookie & Session)

1、Cookie和Session

(1)Cookie简介

  • 定义:由服务端生成,用于标记客户端的唯一标识,每次在网络请求中,都会被传送;
  • cookie属性
属性 描述 范例
Name 名称 BDORZ
Value B490B5EBF6F3CD402E515D22BCDA1598
Domain 表示当前cookie所属于那个域下 .baidu.com
Path 当前cookie所属路径 /
Expires/Max-age cookie有效期 2022-01-29T11:59:41.000Z
size 大小限制 37
http-only cookie不能被客户端使用js读取到,是不公开的cookie
Secure 标记为Secure的Cookie只能够通过https协议加密过的请求给服务端
  • 范例1:以CSDN的页面为例

第五章 JavaWEB专题之会话跟踪技术(Cookie & Session)_第1张图片

  • 2范例2:JS获取Cookie
document.cookie

第五章 JavaWEB专题之会话跟踪技术(Cookie & Session)_第2张图片

(2)Session简介

  • 定义:服务端自己维护的一个map数据结构,记录key-Object上下文内容;

第五章 JavaWEB专题之会话跟踪技术(Cookie & Session)_第3张图片

(3)Cookie和Session生成

①浏览器发送request请求到服务器,服务器处了返回请求的response之外,还给请求分配一个唯一标识ID和response给浏览器

②服务器在本地创建一个map结构,专门以key-value存储这个ID标识和浏览器的关系

③当浏览器的第一次请求后已经分配一个ID,当第二次访问时会自动带上这个标识ID,服务器会获取这个标识ID去map里面招上一次request的信息状态并做对应的更新操作。

cookie:服务端生成的全部唯一标识,传递给客户端用于标记这次请求
session:服务器创建的那个map结构
总而言之:session是存在服务器,session依赖于cookie,cookie里面存储的就是JSESSIONID
2、Cookie开发实战
获取请求Cookie:Cookie[] cookies = req.getCookies()
返回响应Cookie: Cookie cookie = new Cookie("token","sfwerawefewadaewfafewafa");

(1)范例一

  • 业务场景:获取请求的cookie
@WebServlet("/get_cookie_test")
public class CookieServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for( Cookie cookie: cookies){
            cookie.getDomain();
        }
    }
}

Ⅰ、进行断点调试,首次生成Cookie:点击右上角的debug(小虫标志),之后在浏览器中输入http://localhost:8080/cookie_test

第五章 JavaWEB专题之会话跟踪技术(Cookie & Session)_第4张图片

Ⅱ、查看页面:生成SessionID

在这里插入图片描述

Ⅲ、查看输出结果

在这里插入图片描述

(2)范例二

  • 业务场景:获取返回的cookie
@WebServlet("/gene_cookie_test")
public class GeneCookieServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        Cookie cookie = new Cookie("token","sfwerawefewadaewfafewafa");

        //20秒过期时间,过期后不会自动携带过去
        cookie.setMaxAge(20);

        response.addCookie(cookie);

        request.getRequestDispatcher("/index.jsp").forward(request,response);
    }
}
  • 运行结果

在这里插入图片描述

3、Session开发实战

(1)范例一

@WebServlet("/session_servlet")
public class SessionServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        HttpSession session = request.getSession();

        //获取sessionid,java里面叫jsessionid
        System.out.println("sessionid="+session.getId());

        //创建时间戳,毫秒
        System.out.println("getCreationTime="+session.getCreationTime());


        //是否是初次创建,记得情况浏览器的cookie,验证sessionid
        System.out.println("isNew="+session.isNew());


        //往session存储东西
        session.setAttribute("name","卷");

    }
}
  • 首次访问运行结果

在这里插入图片描述

  • 第二次访问运行结果

在这里插入图片描述

你可能感兴趣的:(JavaWEB专题,前端,javascript,http)