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

1、Cookie和Session

(1)Cookie简介

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

在这里插入图片描述

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

在这里插入图片描述

(2)Session简介

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

在这里插入图片描述

(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

在这里插入图片描述

Ⅱ、查看页面:生成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","卷");

    }
}
  • 首次访问运行结果

在这里插入图片描述

  • 第二次访问运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随缘清风殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值