会话技术(Cookie、Session)

会话技术

一次会话:客户端连接上服务器开始,客户端退出结束,会产生多次请求
在这里插入图片描述

Cookie

客户端技术
不安全(客户端可以删除,查看), 但可以减轻服务器压力

  • 向客户端存储cookie
    response.addCookie(cookie) - 本质是response.setHeader(“set-cookie”)

在这里插入图片描述

        // 将数据存储在cookie中, 通过response对象
        // a.创建cookie对象 String-String类型的键值对
        Cookie cookie = new Cookie("name", "zhangsan");
        // b.通过response将cookie传递给客户端
        // 本质是通过响应头set-cookie,把数据传递给客户端的
        response.addCookie(cookie);
  • 从客户端获取cookie
    request.getCookies() - 本质是request.getHeader(“cookie”)

在这里插入图片描述

        // 通过请求对象获得cookie
        // 将客户端携带过来的cookie全部获得
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            // 假设只有一个cookie对象
            String name = cookies[0].getName();
            String value = cookies[0].getValue();

            response.getWriter().write("success: " + name + "," + value);
        } else {
            response.getWriter().write("cookie is null");
        }
  • cookie默认的生命周期:new 开始, 到会话结束
    设置持久化时间:cookie.setMaxAge(int 秒);
    设置时间=0, 立即删除
    设置时间=-1, 恢复默认
        // 设置cookie的持久化时间(秒)
        cookie.setMaxAge(60*5);
  • 设置cookie的携带路径
    cookie.setPath()
    1. / — 当前服务器所有资源
    2. /web — 当前应用所有资源
    3. /web/DemoServlet — 单纯只有DemoServlet资源
    默认:当前目录
    set-cookie的资源路径: (当前目录:cookie)http://localhost:8080/web/cookie/DemoServlet
        // 设置cookie的携带路径
        // 设置cookie在访问DemoServlet的时候才会携带到服务器
        cookie.setPath("/web/DemoServlet");
        // 设置cookie在访问web应用中所有的资源都会携带到服务器
        cookie.setPath("/web");
        // 设置cookie在访问这个服务器中所有的资源时,都会携带到服务器
        cookie.setPath("/");
  • 注意:只有当cookie的name和path一致的时候才会认为是同一个cookie
    例:c1、c2不是同一个cookie
    • Cookie c1 = new Cookie(“name”,“zhangsan”);
      Cookie c2 = new Cookie(“name”,“zhangsan); c2.setPath(”/");

Session

服务器技术
安全, 但服务区压力较大
域对象范围:一次会话

在这里插入图片描述

  • 服务器第一次为客户端创建Session对象的时候, 会分配一个JSESSIONID编号,并且将 JSESSIONID 传递给客户端的cookie进行保存

  • 一次会话结束, 下次会话想要继续访问之前的session,需要将JSESSIONID 进行持久化

        // 1.获取session对象
        HttpSession session = request.getSession();
        // 2.获取session的id
        String jsessionid = session.getId();
        // 3.创建一个一模一样的cookie
        Cookie cookie = new Cookie("JSESSIONID", jsessionid);
        cookie.setPath(request.getContextPath());
        // 4.设置这个cookie持久化时间
        cookie.setMaxAge(Integer.MAX_VALUE);
        // 5.将原来的cookie覆盖
        response.addCookie(cookie);
        // 2.向session中存储数据
        session.setAttribute("name", "zhangsan");
        // 1.获取session对象
        HttpSession session = request.getSession();
        // 2.从session中取数据
        String name = session.getAttribute("name");
  • session的生命周期
    创建:客户端第一次调用getSession()方法时
    销毁:
    – 手动销毁 session.invalidate();
    – 服务器非正常关闭
    注意:服务器正常关闭, session不会消失, 会变成文件保存在本地磁盘 - session钝化
    – 超时30分钟
<session-config>
	<session-timeout>分钟</session-timeout>
</session-config>

域对象

ServletContext:服务器启动期间
session:一次会话
request:一次请求
pageContext:page域(当前页面)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值