代码模板,Cookie和Session

news2024/11/26 7:00:19

目录

代码模板

Cookie的基本使用

概念

Cookie的API

public Cookie(String name, String value)

 发送Cookie对象到客户端:使用response对象

创建Cookie对象并响应给浏览器 

在服务器后端获取Cookie对象 Cookie[]cookies=requset.getCookies(); 

Cookie的使用细节

1.持久化Cookie

 2.cookie存储特殊字符

 Session的基本使用

概念

 获取Session对象,使用request对象

存储数据到session域中

根据key,获取值

根据key,删除键值对

Session的原理


代码模板

我们发现重复写一个代码很繁琐,我们可以i设置一个代码模板

写一个组名

在组名中添加

写完代码模板之后,要点击define选择代码类型,正确会变成change

成功

Cookie的基本使用

概念

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

Cookie是创建服务器端,存在于浏览器端 

好处:减轻服务端压力

弊端:不安全,一旦清空浏览器数据,这些Cookie数据就会被清除 

Cookie的API

public Cookie(String name, String value)

创建Cookie对象,并设置数据

Cookie cookie=new Cookie("key","value");
 

 发送Cookie对象到客户端:使用response对象

reponse.addCookie(cookie);

创建Cookie对象并响应给浏览器 

步骤:

1.创建Cookie对象
 //name值是唯一的,如果name值一致,后出现的value会覆盖之前的value

2.把Cookie对象发送到浏览器

@WebServlet("/cookieServlet1")
public class cookieServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie对象
        //name值是唯一的,如果name值一致,后出现的value会覆盖之前的value
        Cookie cookie = new Cookie("msg", "赫赫");
        //把Cookie对象发送到浏览器
        response.addCookie(cookie);
    }

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

查看

在服务器后端获取Cookie对象 Cookie[]cookies=requset.getCookies(); 

@WebServlet("/cookieServlet2")
public class cookieServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //取出请求中的所有Cookie对象
        Cookie[] cookies = request.getCookies();
        //遍历cookies
        for (Cookie cookie : cookies) {
            //获取cookie对象的name
            String name = cookie.getName();
            //获取cookie的value
            String value = cookie.getValue();
            System.out.println(name+"----"+value);
        }
    }

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

结果:

Cookie的使用细节

1.持久化Cookie

cookie默认是会话级别的,会话结束(关闭浏览器),cookie消失,再次打开浏览器cookie就会不存在 。在开发中会话级别的cookie无法达到长时间共享数据

因此我们要使用持久化Cookie

持久化Cookie就是要使用Cooki类的方法

void setMaxAge(int expiry)  单位是秒 

测试

@WebServlet("/cookieServlet3")
public class cookieServlet3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建cookie
        Cookie cookie = new Cookie("username", "hh");
        //设置持久化cookie
        cookie.setMaxAge(60*60*24);//一天
        //响应给cookie
        response.addCookie(cookie);
    }

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

 

 2.cookie存储特殊字符

1.如果向cookie中存储特殊字符,如果存放就会报错,消息 Cookie值中存在无效字符[32] 描述 服务器遇到一个意外的情况,阻止它完成请求。

2.如果想向cookie中存储特殊字符需要对特殊符号进行编码和解码

存储

@WebServlet("/cookieServlet4")
public class cookieServlet4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String value="hh aa";//空格是特殊字符

        //直接响应给浏览器会报错 消息 Cookie值中存在无效字符[32] 描述 服务器遇到一个意外的情况,阻止它完成请求。
        //所以设置编码
        String encode = URLEncoder.encode(value, "utf-8");
        //创建Cookie
        Cookie cookie = new Cookie("msg", encode);
        response.addCookie(cookie);


    }

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

 

读取

@WebServlet("/cookieServlet5")
public class cookieServlet5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //获取Cookie对象
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if("msg".equals(cookie.getName())){
                //取值
                String value = cookie.getValue();
                //解码
                String decode = URLDecoder.decode(value, "utf-8");
                System.out.println("decode="+decode);//decode=hh aa
            }
        }
    }

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

 

 Session的基本使用

概念

服务器会话跟踪技术:创建于服务器,将数据存储到服务端

        Session是将数据存储到服务端,而Cookie是将数据存储到客户端

        存储在客户端的数据容易被窃取

        存储在服务端的数据更安全

 获取Session对象,使用request对象

HttpSession session=request.getSession();//如果第一次执行就是创建session对象,如果不是第一次执行就是获取session

HttpSession session=request.getSession(boolean create);//如果是true,跟无参一样,如果是false表示如果存在session就获取,如果不存在就不创建session,就返回null;

 Session对象提供的功能:Session也是域对象,只要再一次会话过程中多次请求都可以共享seesion中的数据

存储数据到session域中

void setAttribute(String name,object c);

根据key,获取值

Object getAttribute(String name);

根据key,删除键值对

void removeAttribute(String name) 

测试

@WebServlet("/sessionServlet1")
public class sessionServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Session
        HttpSession session = request.getSession();//没有seesion就创建,有就获取
        //存储数据
        session.setAttribute("msg","session");
    }

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

 

@WebServlet("/sessionServlet2")
public class sessionServlet2 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);//session
    }

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

Session的原理

tomcat服务器会为每个浏览器(访问的Servlet创建Session)创建一个session容器,那么每个session容器该怎么区分?

         tomcat创建session容器之后会为每个seesion容器添加一个唯一的标识,这个标识JSESSIONID 并使用该标识来区分seesion容器

由于tomcat服务器存在多个session容器,那么对于浏览器甲来说,第二次访问tomcat服务器的时候,怎么找到自己的容器?

        其实tomcat在第一次为浏览器创建session容器的时候同时会创建一个会话Cookie,将session容器的唯一标识JSESSIONID存放到cookie中,然后将会话级别的cookie存放到浏览器中,当下次访问tomcat服务器时携带cookie,并在tomcat中取出cookie中的JSESESSION的值,进行比对查找找到自己创建的容器,然后再取出存储的数据

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

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

相关文章

Linux 软件包管理器 yum的下载、功能介绍及使用

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 Linux下的三种软件安装方…

香橙派 AiPro通过Micro USB接口进行串口调试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、配置步骤1.安装CH343驱动2.配置串口参数 二、使用步骤总结 前言 最近在玩一个新玩具香橙派 AiPro,除了通过SSH方式连接开发板以外,…

创新指南|降低 TikTok CPA 的 9 项专家策略

企业在 TikTok 上投放广告,往往最想确保获得最佳的投资回报。然而,这往往说起来容易做起来难。您需要了解如何利用不同的营销工具、定位策略和创意执行来实现您的业务目标并提高成本效率。本文将分享 9 个行之有效的策略,助您有效降低 TikTok…

【介绍下如何在SQL中添加数据】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Linux——多线程(一)

一、线程的概念 1.1线程概念 教材中的概念: (有问题?) 线程是进程内部的一个执行分支,线程是CPU调度的基本单位 之前我们讲的进程: 加载到内存中的程序&#x…

go-zero 实战(2)

go-zero 实战(1) 中,使用了go-zero 创建了order 和 user 两个微服务。而order作为grpc的客户端,user 作为grpc的服务端,打通了 order 到 user的调用。接下来,我们在user中,加入mysql组件。确保数…

module ‘plotting‘ has no attribute ‘EpisodeStats‘

plotting.py 的版本不同,可以使用下列版本 reinforcement-learning/lib/plotting.py at master dennybritz/reinforcement-learning GitHubImplementation of Reinforcement Learning Algorithms. Python, OpenAI Gym, Tensorflow. Exercises and Solutions to a…

【Real】[Flask]SSTI

文章目录 前言一、题目解读二、解题过程三、知识点Flask是什么SSTI是什么SSTI是如何形成的易于利用的类payload是什么 探索类型和类层次结构和方法 前言 温馨提示:看到哪里不懂直接跳到知识点部分,理解完再回到解题过程。 一、题目解读 题目是[Flask]S…

winform安装时覆盖原版本并保留配置文件

如何打包参考大佬的博客添加链接描述 覆盖原版本 修改 Properties 下的 AssemblyInfo.cs 中的版本号,如下。原来是1.0.0.0,我修改成1.0.2。 选中 Setup 项目,修改 Version 属性修改 Version 属性后 ProductCode 也会改变,卸载程…

关于k8s集群的污点和容忍,以及k8s集群的故障排查思路

一 污点(Taint) 和 容忍(Tolerations) (一)污点 在Kubernetes(K8s)中,污点(Taints)是一个重要的概念,用于实现Pod的调度控制。以下是关于污点的详细解释:1.污点定义 污点…

SSL协议:网络安全通信的守护者

在网络通信迅猛发展的今天,数据安全和隐私保护变得尤为重要。安全套接层协议(Secure Sockets Layer, SSL)作为早期网络加密及身份验证的基石,为在线数据传输提供了安全保障。下面我们就来了解一下SSL协议。 SSL协议概述 SSL协议最…

package.json中peerDependencies的使用场景

文章目录 peerDependencies 的使用场景peerDependencies 的使用案例为什么使用 peerDependencies需要注意的事项主要作用 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你的加入&#xf…

(2020|ICML PMLR,线性 Transformer,核函数,RNN)Transformer 是 RNN

Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention 公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 线性 Transformers 3.1. Transformer 3.2.…

力扣62 不同路径 Java版本

文章目录 题目描述代码 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少…

NLP技术发展和相关书籍分享

自然语言处理(Natural Language Processing,NLP)是计算机科学领域和人工智能领域的重要研究方向之一,旨在探索实现人与计算机之间用自然语言进行有效交流的理论与方法。它融合了语言学、计算机科学、机器学习、数学、认知心理学等…

场景文本检测识别学习 day10(MMdetection)

配置文件(config) 由于在大型项目中,一种模型需要分:tiny、small、big等很多种,而它们的区别主要在网络结构,数据的加载,训练策略等,且差别很多都很小,所以如果每个模型都手动从头写一份&#…

ssm150旅游网站的设计与实现+jsp

旅游网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞…

鸿蒙OS开发:【一次开发,多端部署】(音乐专辑主页)

一多音乐专辑主页 介绍 本示例展示了音乐专辑主页。 头部返回栏: 因元素单一、位置固定在顶部,因此适合采用自适应拉伸,充分利用顶部区域。专辑封面: 使用栅格组件控制占比,在小尺寸屏幕下封面图与歌单描述在同一行。歌曲列表: 使用栅格组…

汽车电子零部件(14):TMS热管理系统

前言: TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要…

假象和谎言

原创 | 刘教链 隔夜BTC(比特币)徘徊在69k一线。5.25教链内参报告,《BTC ETF持仓即将超越中本聪》。ETH ETF的尘嚣逐渐散去,复归于平静。戏刚唱了个开头,结尾还留着悬念。4000刀之于ETH看来是个关键阻力位,最…