会话技术之Cookie和Session

news2025/3/17 8:18:00

一、会话技术

1、概念     

  • 会话:一次会话包含多次请求和响应。
  • 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止。

2、功能

  •  用于在多次请求之间跟踪和管理用户状态,实现数据连续性、数据共享和个性化等功能。

3、方式

(1)客户端会话技术:Cookie

(2)服务器端会话技术:Session

二、Cookie

1、概念

         客户端会话技术,将数据保存到客户端。

2、使用步骤

(1)创建Cookie对象,绑定数据。

(2)发送Cookie对象。

          方法:response.addcookie(cookie cookie)

(3)获取Cookie,拿到数据。

         方法:request.getCookies()

  • 代码示例:
@WebServlet("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建cookie对象
        Cookie cookie = new Cookie("mag", "hello");
        response.addCookie(cookie);
    }

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

@WebServlet(name = "CookieDemo2", value = "/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie c:cookies){
                String name=c.getName();
                String value = c.getValue();
                System.out.println(name+"---"+value);
                /*结果:
                  JSESSIONID---FE9F2F56729D63A4899A588AFB3CA8C3
                  mag---hello
                  Idea-5574819d---8e64ae8b-0a15-4a40-bc2f-13c605f4080e*/
            }
        }
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
    }
}

3、实现原理

  • 客户端发送请求
  • 当服务器接收到请求后,它可以生成一个唯一的标识符,也就是 Cookie,服务器通过 Set-Cookie 头部发送一个或多个 Cookie 给客户端。
  • 一旦客户端收到服务器发送的 Cookie,它会将 Cookie 存储在客户端的内存或者硬盘上,通常是以文本文件的形式保存。
  • 客户端向服务器发送请求时,浏览器会自动在请求头中携带相应的 Cookie 数据。这样,服务器就能够根据特定的 Cookie 来识别和关联来自同一用户的多个请求。
  • 服务器在接收到请求后,可以读取请求头中携带的 Cookie 数据。它可以解析和验证这些 Cookie,并根据其中的信息来获取用户的状态和个性化数据。

4、Cookie细节

(1)一次可不可以发出多个Cookie?

     答:可以

            方法:可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。

  • 代码演示:
@WebServlet("/CookieDemo3")
public class CookieDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie1 = new Cookie("msg", "hello");
        Cookie cookie2 = new Cookie("name", "zhangsan");
        response.addCookie(cookie1);
        response.addCookie(cookie2);
    }

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

@WebServlet(name = "CookieDemo2", value = "/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie c:cookies){
                String name=c.getName();
                String value = c.getValue();
                System.out.println(name+"---"+value);
               /* 结果:
                JSESSIONID---1F470E5E0D3E38C905A7754DC3E15A46
                msg---hello
                name---zhangsan
                Idea-5574819d---8e64ae8b-0a15-4a40-bc2f-13c605f4080e*/
            }
        }
    }

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

(2)cookie可以在浏览器中保存多长时间?

  ①默认情况下,浏览器关闭,cookie数据被销毁

  ②持久化存储:方法:setMaxAge(int seconds)

  • 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效。
  • 负数:默认情况
  • 0:删除cookie信息
  • 代码演示:
@WebServlet("/CookieDemo3")
public class CookieDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("msg", "hello");
        //cookie.setMaxAge(30);//30秒后销毁cookie
        //cookie.setMaxAge(-1);
        cookie.setMaxAge(0);
        response.addCookie(cookie);
    }

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

5、cookie的共享

(1)同一个tomcat服务器中,多个web项目,默认情况下这些web项目中cookie是不可共享的。

      若要共享:使用setpath(String path)方法设置cookie的取值范围

                      默认情况下,设置的是当前虚拟目录,如果要多个项目共享,则可以将path设置为"/"。

代码示例:

@WebServlet("/CookieDemo5")
public class CookieDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("msg", "hello");
        cookie.setPath("/");
        response.addCookie(cookie);
    }

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

(2) 不同的tomcat服务器间cookie共享

          设置一级域名相同,那么多个服务器之间cookie可以共享。

          方法:setDomain(String path)

6、cookie的作用与特点

(1)  cookie存储数据在客户端浏览器

(2) 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)

作用:

(1) cookie一般用于存出少量的不太敏感的数据

(2) 在不登录的情况下,完成服务器对客户端的身份识别

三、JSP简单了解

1、概念

       JSP(Java Server Pages):Java服务器端页面,是一种用于在服务器端生成动态网页的技术。它结合了静态的 HTML 页面Java 代码,以便在服务器上生成动态内容,并将其发送给客户端浏览器。

2、原理

       JSP本质上就是一个Servlet。

  • 工作原理:

 

3、JSP脚本

JSP定义Java代码的方式有三种:

(1) <%  代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。

(2)<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。

(3)<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

4、JSP内置对象

(1)JSP内置对象在jsp页面中不需要获取和创建,可以直接使用。

(2) jsp内置对象有9个(我们今天先介绍3个):

      ① request:

      ②response:

      ③ out:字符输出流对象,可以将数据输出到页面上。和response.getWriter()类似

         * response.getWriter()和out.write()的区别:
           在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。所有·response.getWriter()数据输出永远在out.write()之前

四、Session 

 1、概念

           Session:客户端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中(HttpSession)。

2、方法

(1)获取HttpSession对象:
        request.getSession();

(2)使用HttpSession对象:
        getAttribute(String name)  
        setAttribute(String name, Object value)
        removeAttribute(String name)  

  • 代码示例:
@WebServlet("/Session1")
public class Session1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session
        HttpSession session = request.getSession();
        session.setAttribute("msg","hello");
    }

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

@WebServlet("/Session2")
public class Session2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session
        HttpSession session = request.getSession();
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
    }

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

3、原理

     Session的实现依赖于cookie。

  • 原理图:

4、细节

(1)当客户端关闭后,服务器不关闭,两次获取session是否为同一个? ​

         答: 默认情况下不是。 ​

         若需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。 ​ Cookie c = new Cookie("JSESSIONID",session.getId());

代码示例:

@WebServlet("/Session3")
public class Session3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session
        HttpSession session = request.getSession();
        Cookie c = new Cookie("JSESSIONID",session.getId());
		c.setMaxAge(60*60);
		response.addCookie(c);
    }

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

 (2)客户端不关闭,服务器关闭后,两次获取的session是同一个吗? ​

          答:不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作 ​ :

                session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上 ​

                session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。

(3) session什么时候被销毁?

            ①服务器关闭

            ② session对象调用invalidate() 。

           ③session默认失效时间 30分钟。

                       可在tomcat安装文件中选择web.xml进行配置:

                                        <session-config>

                                           <session-timeout>30</session-timeout>

                                        </session-config>

5、特点

(1) session用于存储一次会话的多次请求的数据,存在服务器端
(2)session可以存储任意类型,任意大小的数据

(3)session与Cookie的区别:
       ①session存储数据在服务器端,Cookie在客户端
        ② session没有数据大小限制,Cookie有
        ③ session数据安全,Cookie相对于不安全

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

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

相关文章

掉了无数头发成地中海后,我整理出了这套40+的大屏模板,快收藏!

最近又有不少粉丝后台问我接不接做可视化大屏&#xff0c;看来可视化大屏是越来越火啦&#xff0c;但老李还是要说一下&#xff0c;老李本身工作就很忙&#xff0c;实在是顾不过来&#xff0c;但老李会在自己体验过后为大家挑选合适的工具和模板&#xff0c;提升大家做大屏的效…

『PyQt5-Qt Designer篇』| 07 Qt Designer中栅格布局和表单布局的使用

07 Qt Designer中栅格布局和表格布局的使用 1 栅格布局1.1 按钮布局1.2 栅格布局中拖入控件1.3 保存并调用2 表单布局2.1 标签+输入控件2.2 保存并调用3 组合水平和垂直布局1 栅格布局 1.1 按钮布局 拖入几个按钮,如图: 选中所有按钮,右键点击布局-栅格布局: 之后可以看到…

日志开源组件(六)Adaptive Sampling 自适应采样

业务背景 有时候日志的信息比较多&#xff0c;怎么样才可以让系统做到自适应采样呢&#xff1f; 拓展阅读 日志开源组件&#xff08;一&#xff09;java 注解结合 spring aop 实现自动输出日志 日志开源组件&#xff08;二&#xff09;java 注解结合 spring aop 实现日志tr…

navicat连接数据库的方法(易懂)

1.首页要先下载Navicat 官网下载即可 2.下载完点击进入 找到左上角的连接 3.点击选择MySQL... 4.点击进入开始连接数据库

Linux常用命令——declare命令

在线Linux命令查询工具 declare 声明或显示shell变量 补充说明 declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项&#xff0c;则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的…

XPloteCAD开发实录-第一阶段

在该解阶段,主要的工作内容: 1.完成了框架引擎的设计代码设计工作; 2.完成了矩阵库,线性,微分几何等第三方数学库的封装; 3.完成了XPloteFrameWork 等设计和代码,里面包含不限于AutoFac,AutoMap,Serilog等封装以及各种模块的工具化; 这是目前用这个框架搭建完成的操作界面:…

IDEA遇到 git pull 冲突的几种解决方法

1 忽略本地修改&#xff0c;强制拉取远程到本地 主要是项目中的文档目录&#xff0c;看的时候可能多了些标注&#xff0c;现在远程文档更新&#xff0c;本地的版本已无用&#xff0c;可以强拉 git fetch --all git reset --hard origin/dev git pull关于commit和pull的先后顺…

iTOP-STM32MP157开发板应用层和内核层传递数据

我们的应用层和内核层是不能直接进行数据传输的。我们要想进行数据传输&#xff0c;要借助下面的这两个函数。 static inline long copy_from_user(void *to, const void __user * from, unsigned long n) static inline long copy_to_user(void __user *to, const void *fro…

基于java Swing 和 mysql实现的购物管理系统(源码+数据库+说明文档+运行指导视频)

一、项目简介 本项目是一套基于java Swing 和 mysql实现的购物管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过…

他们朝我扔泥巴(scratch)

前言 纯~~~属~~~虚~~~构~~~&#xff08;同学看完短视频要我做&#xff0c;蟹蟹你&#xff09; 用scratch做的&#xff0c;幼稚得嘞(&#xffe3;_&#xffe3;|||)呵呵&#xff08;强颜欢笑&#xff09; 完成视频 视频试了好久&#xff0c;就是传不上来&#xff0c;私信我加我…

19 个最佳Three.JS 示例

推荐&#xff1a;使用 NSDT编辑器快速搭建3D应用场景 在浏览器中创建动画三个JS模型创建 3D 动画文本从 3D 图像创建 2D 模型制作 3D 模型动画添加 3D 效果创建 3D 游戏和交互式体验编程 3D 虚拟现实体验将颜色应用于 3D 几何体控制 3D 渲染性能与 3D 环境交互修改 3D 环境的照…

向量数据库(第 4 部分):分析权衡

在本系列的上一篇文章中&#xff0c;我们介绍了向量数据库中通常使用的不同类型的索引。然而&#xff0c;索引只是向量数据库中更大问题中的一小部分。回想一下&#xff0c;在第二部分中&#xff0c;我们描述了什么是向量数据库。为了区分目前市场上的各种向量数据库产品&#…

19.(地图工具篇)ArcMap合并与分割Shape

地图之家总目录&#xff08;订阅之前必须详细了解该博客&#xff09; 一&#xff1a;Arcgis合并shape文件 1.使用Merge工具 2.配置 3.等待合并完成 二&#xff1a;Arcgis分割shape文件 1&#xff1a;选择split by attribute工具 2:配置&#xff08;根据COUNTYNAME分割…

看这里,iOS备忘录恢复的3个简单高效方法

想问iPhone用户们一个问题&#xff1a;你们知道手机上哪个软件最了解自己吗&#xff1f;答案是&#xff1a;ios备忘录。为什么说是备忘录呢&#xff1f;因为备忘录记录了大家各种软件的账号密码、日常计划、朋友的生日&#xff0c;甚至是非常重要的银行卡密码。 由此看来&…

QT6添加第三方模块的cmake配置和qmake配置(以串口模块qserialport为例)

参考1&#xff0c;参考2 qmake建立的工程&#xff1a;https://mar-sky.blog.csdn.net/article/details/132487461&#xff0c; 模块安装&#xff1a;https://mar-sky.blog.csdn.net/article/details/132483421 简单的使用介绍 在qmake创建的项目工程中&#xff0c;使用外部模…

国标视频融合云平台EasyCVR视频汇聚平台的应用场景及其功能说明

一、平台简介 EasyCVR国标视频融合云平台是一款基于端-边-云一体化架构的视频融合AI智能分析网关平台。EasyCVR平台支持视频汇聚、融合管理&#xff0c;兼容多类型设备、多协议接入。其提供的视频功能包括&#xff1a;视频监控、无插件直播录像、云存储、检索回放、智能告警、…

信息化发展9

智能制造 智能制造&#xff08; Intelligent Manufacturing , IM&#xff09; 是基于新一代信息通信技术与先进制造技术深度融合&#xff0c; 贯穿于设计、生产、管理、服务等制造活动的各个环节&#xff0c; 具有自感知、自学习、自决策、自执行、自适应等功能的新型生产方式…

Spring Cloud Nacos 和 Eureka区别,包含实战代码

目录 一、Spring Cloud Eureka详解二、Spring Cloud Nacos详解三、Spring Cloud Nacos和Eureka区别 Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服务框架中的服务注册和发现组件&#xff0c;用于帮助开发者轻松地构建和管理微服务应用。它们之间的主要区别…

电脑中毒的症状有哪些?电脑中毒数据没了能恢复吗

电脑中病毒想要恢复数据&#xff0c;怎么办&#xff1f;&#xff1f;急&#xff01;&#xff01;&#xff01;电脑D盘里有很多高三时候的照片&#xff0c;很珍贵&#xff01;&#xff01;求助啊&#xff01;&#xff01;? ——互联网的不断发展和普及使得电脑已经成为我们生活…

解决PPPoE连接与防火墙冲突问题

在使用PPPoE&#xff08;Point-to-Point Protocol over Ethernet&#xff09;连接时&#xff0c;有时可能会遇到与防火墙之间的冲突问题。本文将为您提供实用指南&#xff0c;帮助您解决这一常见问题。 1. 确认阻止网络访问的原因 首先要确定是否存在由于防火墙设置而造成无法…