Javaweb会话跟踪技术(Cookie和Session)

news2025/4/8 10:01:51

目录

一、会话跟踪技术概述

二、Cookie

1.Cookie基本原理

2.Cookie基本使用

3.Cookie存活时间

4.cookie存储中文

三、Session

1.Session钝化、活化

2.Session基本使用

3.sesion销毁 

四Cookie和Sesion区别

一、会话跟踪技术概述

1.会话:用户打开浏览器,访问网页资源,会话就建立了。直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

2.会话跟踪:一种维护浏览器状态的方法,服务器需要多次识别请求是否来自同一个浏览器,以便在同一次会话中的多次请求共享数据

3.为什么要共享数据?

答:因为HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享。

4.实现方式

客户端会话跟踪技术:Cookie

服务端会话跟踪技术:Session

二、Cookie

1.Cookie基本原理

 cookie的实现是基于HTTP协议的

发送cookie到浏览器:响应头:set-cookie

携带cookie访问服务器:请求头:cookie

2.Cookie基本使用

Cookie:客户端会话技术,将技术保存到客户端,以后每次请求都携带Cookie数据进行访问

ps:我们主要是做服务端的开发,那么使用这个Cookie。首先就是要把这个Cookie发送到客户浏览器,以后客户浏览器就可以获取这个Cookie去进行访问其他的Servlet。

(1)发送cookie

使用response对象 

package com.project.JavaScript;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.IOException;


@WebServlet("/res")
public class res extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //发送Cookie
        //1.创建Cookie对象
        Cookie cookie = new Cookie("username","666");

        //2.发送Cookie,response
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

 

 查看方法:F12或者检测--应用程序--查看cookie就可以看到了(这是edge浏览器)

 

(2)获取cookie

 使用request对象

package com.project.JavaScript;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.IOException;


@WebServlet("/res")
public class res extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie
        //1.获取Cookie数组
        Cookie[] cookies = request.getCookies();

        //2.遍历数组
        for (Cookie cookie : cookies) {
            //获取键
            String name = cookie.getName();
            //获取值,要先判断一下需要的值获取出来就好了
            if ("username".equals(name)){
                //获取对应的值
                String value = cookie.getValue();
                //打印
                System.out.println(name+":"+value);
                //获取到了对应的值就终止
                break;
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

运行结果:控制台输出

username:666

3.Cookie存活时间

 默认情况下,cookie存储在浏览器内存中,当浏览器关闭,内存释放,则cookie被销毁

setMaxAge(int seconds):设置cookie存活时间

1.正数:将cookie写入浏览器所在的电脑硬盘,持久化存储,到时间自动删除

2.负数:默认值,cookie随着浏览器的关闭而销毁

3.零:删除对应的cookie

存储七天的例子

package com.project.JavaScript;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.IOException;


@WebServlet("/res")
public class res extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //发送Cookie
        //1.创建Cookie对象
        Cookie cookie = new Cookie("username","666");

        //设置cookie存活7天 60是秒
        cookie.setMaxAge(60*60*27*7);

        //2.发送Cookie,response
        response.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

其实就一行代码

cookie.setMaxAge(60*60*27*7);

4.cookie存储中文

cookie不能直接存储中文

如果需要存储,则要进行转码:URL编码 

 

三、Session

session是基于cookie的 

服务端会话跟踪技术:将数据保存到服务端

JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能

如果数据存储在cookie里面,每次访问带来带去,就会造成泄露的隐患,所以使用Sessoin比较好一点

1.Session钝化、活化

服务器在重启后,sesion中的数据是否还存在

钝化:在服务器正常关闭后,Tomacat会自动将sesion数据写入到硬盘中

活化:再次启动服务器后,从文件中加载数据到sesion中

2.Session基本使用

存储Session 

package com.project.JavaScript;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/Session1")
public class Session1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //存储到session中
        //1.获取session对象
        HttpSession session = request.getSession();
        //2.存储数据
        session.setAttribute("username","KPL");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

 获取Session

package com.project.JavaScript;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/Session2")
public class Session2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取数据,从session中
        //1.获取session对象
        HttpSession session = request.getSession();

        //2.获取数据
        Object username = session.getAttribute("username");
        System.out.println(username);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

运行结果为

KPL

3.sesion销毁 

默认情况下,无操作,30分钟自动销毁

更改为100分钟例子

在web.xml里面配置就好了

    <session-config>
        <session-timeout>100</session-timeout>
    </session-config>

 立即销毁(销毁sesion自己)

session.invalidate();

 

四Cookie和Sesion区别

区别:

存储位置:cookie是将数据存储在客户端,sesion将数据存储在服务端

安全性:cookie不安全,sesion安全

数据大小:cookie最大3KB,sesion无大小限制

存储时间:cookie可以长时间存储,sesion默认30分钟

服务器性能:cookie不占用服务器资源,sesion占用服务器资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java和vue开发的橱柜定制系统家具定制系统

简介 橱柜定制家具定制系统。用户查看家具样本&#xff0c;进行预约下单&#xff0c;后台人员根据用户的要求给出效果图和方案&#xff0c;以及报价&#xff0c;填写上门时间。管理员上门测量和用户确定好需求后上传协议&#xff0c;此时订单变成待开工订单&#xff0c;后台人…

过半985、单岗位2K+简历!速腾聚创如何开展校园招聘?

在半导体、芯片等新兴科技产业&#xff0c;人才短缺和人才培养已经成为全球性问题。 速腾聚创是国内激光雷达领域的龙头企业&#xff0c;在庞大人才实力的助推下&#xff0c;构建起激光雷达硬件、感知软件和芯片三大核心技术闭环&#xff0c;通过领先的技术实力和过硬的产品质量…

VB实现火焰的效果

Option Explicit 锁定指定窗口&#xff0c;禁止它更新。同一时刻间只能有一个窗口处于锁定状态&#xff0c;可用在界面作大弧度布局改变时。 Private Declare Function LockWindowUpdate Lib “user32” (ByVal hwndLock As Long) As Long 在指定的设备场景中设置一个像素的RGB…

机器学习多分类二分类回归问题数据集分享

数据集&#xff1a; https://download.csdn.net/download/qq_38735017/87336921

DocuWare 文档管理软件在医疗保健行业的应用

DocuWare 文档管理软件在医疗保健行业的应用 尽管技术在其他领域取得了很大进步&#xff0c;但许多医院、门诊机构和医疗保健提供商仍然使用过时的系统来管理计费、财务和人力资源等文档密集型流程。借助快速、安全、灵活的 DocuWare 文档管理软件&#xff0c;可以节省您的时间…

基于注解方式实现Spring Security忽略拦截

文章目录1.Spring Security忽略拦截配置2.基于配置文件注入2.1.添加配置2.2.修改Spring Security配置类2.3. 测试3.基于注解的方式过滤接口3.1.添加忽略拦截注解3.2.获取所有使用了IgnoreWebSecurity注解的接口访问路径3.3.测试1.Spring Security忽略拦截配置 关于Spring Secu…

启动项目端口被占用无奈只能重启?程序员的电脑绝不允许重启!

各位小伙伴大家好呀~最近疫情严重很多小伙伴都阳了༼༎ຶᴗ༎ຶ༽虽然放开了&#xff0c;但还是要注意防护呀&#xff01; 我们在写代码的时候&#xff0c;很多小伙伴都遇到过启动项目但是端口被占用&#xff0c;找了半天也不知道究竟谁占用的&#xff0c;所以就使出了“杀手锏…

@Scope注解的使用方法

Scope注解的使用方法 原文详细参考 1.Scope注解是什么 Scope注解是 Spring IOC 容器中的一个作用域&#xff0c;在 Spring IOC 容器中&#xff0c;他用来配置Bean实例的作用域对象。Scope 具有以下几种作用域&#xff1a; singleton 单实例的(单例)(默认)   ----全局有且…

OPTIONS 漏洞修复

文章目录前言&#xff1a;OPTIONS 漏洞说明Nginx 修复方法环境说明修复测试Tomcat 修复方法环境说明修复测试Tomcat 版本&#xff1a;8.5.3 测试SpringBoot 项目修复方法环境说明修复测试总结前言&#xff1a;OPTIONS 漏洞说明 漏洞名称 &#xff1a; OPTIONS method is enabl…

Docker+Jenkins+Gitee+Maven构建后台jar包后配置SSH传送到服务器并执行指定命令

场景 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑&#xff1a; DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑_霸道流氓气质的博客-CSDN博客 在上面将后台jar包构建成功之后&#xff…

【SpringMVC】SpringMVC的入门

1.SpringMVC的入门案例 1.1 项目目录 1.2 配置核心控制器和编码过滤器(web.xml) <?xml version"1.0" encoding"UTF-8"?> <web-app><display-name>Archetype Created Web Application</display-name><!--配置spring mvc的核…

20221223英语学习

今日托福词汇 review n.复习; 回顾, 检讨; 检阅; 评论; 详检, 审核; 回放功能 tentative adj.试验性的; 不确定的; 暂时的; 犹豫的, 踌躇不决的 synonym n.同义词 confine v.限制&#xff1b;监禁 parking n.机动车停放&#xff1b;停车场 sculpture n.雕像&#xff0c;雕…

高通 OpenXR SDK 使用指南(2)

高通 OpenXR SDK 使用指南&#xff08;2&#xff09;1.5 OpenXR 生命周期1.5 OpenXR 生命周期 下图是 OpenXR 框架生命周期的流转过程。 此图中描述了以下过程&#xff1a; 应用程序首先使用 xrEnumerateApiLayerProperties 查询 API 层和扩展属性。 API层可以是以下类型&a…

Zookeeper 4 Zookeeper JavaAPI 操作 4.6 Curator API 常用操作【删除节点】

Zookeeper 【黑马程序员Zookeeper视频教程&#xff0c;快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.6 Curator API 常用操作4.6.1 删除节点4 Zookeeper JavaAPI 操作 4.6 Curator API 常用操作 4.6.1 删除节点 直接开干 /*** 删除节点* 1. 删除单…

【Java基础知识复盘】ArrayList、LinkedList篇——持续更新中

本人知识复盘系列的博客并非全部原创&#xff0c;大部分摘自网络&#xff0c;只是为了记录在自己的博客方便查阅&#xff0c;往后也会陆续在本篇博客更新本人查阅到的新的知识点&#xff0c;望悉知&#xff01; ArrayList 概述 ArrayList 类是一个可以动态修改的数组&#xf…

C++【图】

文章目录一、什么是图二、图的存储结构1.邻接矩阵2.邻接表三、邻接表的代码实现四、邻接矩阵的代码实现五、图的相关属性六、图的遍历1.深度优先遍历2.广度优先遍历练习七、最小生成树1.Kruskal算法&#xff08;克鲁斯卡尔算法&#xff09;2.prim算法八、最短路径1.Dijkstra算法…

Zookeeper 4 Zookeeper JavaAPI 操作 4.8 分布式锁

Zookeeper 【黑马程序员Zookeeper视频教程&#xff0c;快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.8 分布式锁4.8.1 分布式锁4.8.2 Zookeeper 分布式锁原理4 Zookeeper JavaAPI 操作 4.8 分布式锁 4.8.1 分布式锁 在我们进行单机应用开发&#x…

[附源码]计算机毕业设计Python失物招领微信小程序论文(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

微信公众号迁移,需要做些什么

❤️ 个人主页&#xff1a;水滴技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; &#x1f338; 订阅专栏&#xff1a;微信公众平台 文章目录一、开通开发者二、设置IP白名单三、自定义菜单四、认证五、网页授权域名六、模板消息七、转换…

芯片漫游指南(4) -- UVM序列

1 新手上路 1.1 概述 在UVM世界&#xff0c;利用其核心特性&#xff0c;在创建了组件和顶层环境&#xff0c;并且完成组件之间的TLM端口连接之后&#xff0c;接下来就可以使得整个环境开始运转了。 在经过一番时间&#xff0c;掌握了组件之间的TLM通信方式&#xff0c;开辟了…