Web 开发会话技术之 -Cookie介绍以及源码分析和图分析以及Cookie的生命周期--路径--中文乱码的分析和代码示例

news2024/11/17 16:36:58

目录

会话

基本介绍

1. 什么是会话?

2. 会话过程中要解决的一些问题?

cookie 技术

cookie 介绍

二说 cookie

cookie 可以用来做啥

cookie 基本使用

cookie 常用方法

cookie 底层实现机制-创建和读取 Cookie

CreateCookie

访问 CreateCookie.java, 使用浏览器抓包分析 , 创建 Cookie 的底层机制

 ReadCookie.java

  访问 ReadCookie.java, 使用浏览器抓包分析 读取 Cookie 的底层机制.

不同会话,jsessionid 不同 

代码

读取指定 Cookie

工具类

-修改 Cookie

cookie 生命周期

介绍

代码示例

 3. 完成测试 , 注意抓包看数据

cookie 有效路径

有效路径规则

3. 规则如下:

 代码示例

3. 完成测试 , 注意抓包看创建 Cookie 时,返回的数据

 4. 完成测试 , 注意抓包看读取 Cookie 时,返回的数据

 代码示例

html页面

java

Cookie 注意事项和细节

代码解决

设置

解码 


Web 开发会话技术之 -Cookie

会话

基本介绍

1. 什么是会话?

会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个 web 资源,然

后关闭浏览器,整个过程称之为一个会话。

2. 会话过程中要解决的一些问题?

1) 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服

务器要想办法为每个用户保存这些数据

2) 例如:多个用户点击超链接通过一个 servlet 各自购买了一个商品,服务器应该想办法

把每一个用户购买的商品保存在各自的地方,以便于这些用户点结帐 servlet 时,结帐

servlet 可以得到用户各自购买的商品为用户结帐。

cookie 技术

Cookie是客户端技术,服务器把每个用户的数据以 cookie 的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的 web 资源时,就会带着各自的数据去。这样,web 资源处理的就是用户各自的数据了。【简单示意图】

 

cookie 介绍

二说 cookie

1. Cookie 是服务器在客户端保存用户的信息,比如登录名,浏览历史等, 就可以以 cookie方式保存.

2. Cookie 信息就像是小甜饼(cookie 中文)一样,数据量并不大,服务器端在需要的时候可以从客户端/浏览器读取(http 协议),可以通过图来理解

 再次说明: cookie 数据是保存在浏览器的.

cookie 可以用来做啥

1. 保存上次登录时间等信息

2. 保存用户名,密码, 在一定时间不用重新登录

3. 网站的个性化,比如定制网站的服务,内容

cookie 基本使用

cookie 常用方法

1. Cookie 有点象一张表(K-V),分两列,一个是名字,一个是值,数据类型都是 String , 如图

2. 如何创建一个 Cookie(在服务端创建的)

Cookie c=new Cookie(String name,String val);

c.setMaxAge();//保存时间

3. 如何将一个 Cookie 添加到客户端

response.addCookie(c);

4. 如何读取 cookie(在服务器端读取到 cookie 信息)

request.getCookies();

cookie 底层实现机制-创建和读取 Cookie

1. 需求: 演示 Cookie 底层实现机制, 创建和读取Cookie

CreateCookie

/**
 * 演示如何创建cookie,并保存到浏览器
 */
public class CreateCookie extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("CreateCookie 被调用...");


        //1. 创建一个Cookie对象
        //1) username 该cookie的名字 是唯一, 可以理解成是key
        //2) xxx : 该cookie的值
        //3) 可以创建多个cookie,老师就创建了一个
        //4) 这是cookie在服务器端, 还没有到浏览器
        Cookie cookie = new Cookie("username", "tom");
        Cookie cookie2 = new Cookie("email", "tom@qq.com");

        response.setContentType("text/html;charset=utf-8");
        //2. 将cookie发送给浏览器, 让浏览器将该cookie保存
        response.addCookie(cookie);
        response.addCookie(cookie2);

        PrintWriter writer = response.getWriter();
        writer.println("<h1>创建cookie成功~</h1>");
        writer.flush();
        writer.close();


    }

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

访问 CreateCookie.java, 使用浏览器抓包分析 , 创建 Cookie 的底层机制

 ReadCookie.java

/**
 * 读取从浏览器发送来的cookie信息[底层仍然是http协议]
 */
public class ReadCookies extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ReadCookies 被调用..");


        //1. 通过request对象读取cookie信息
        Cookie[] cookies = request.getCookies();
        //2. 遍历cookie
        if (cookies != null && cookies.length != 0) {
            for (Cookie cookie : cookies) {
                System.out.println("cookie name= " + cookie.getName()
                        + " value= " + cookie.getValue());
            }
        }



        //3. 给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println("<h1>读取cookie信息成功~</h1>");
        writer.flush();
        writer.close();
    }

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

  访问 ReadCookie.java, 使用浏览器抓包分析 读取 Cookie 的底层机制.

不同会话,jsessionid 不同 

代码

读取指定 Cookie

public class ReadCookieByNameServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //System.out.println("ReadCookieByNameServlet 被调用..");

        //得到指定的cookie的value
        //1. 先得到浏览器携带的所有cookie
        Cookie[] cookies = request.getCookies();
        //2. 使用工具类来获取指定的cookie
        Cookie emailCookie = CookieUtils.readCookieByName("username", cookies);
        if(null != emailCookie) {
            System.out.println("得到cookie name=" + emailCookie.getName()
                    + " value= " + emailCookie.getValue());
        } else {
            System.out.println("sorry, 没有这个cookie");
        }

        //3. 给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println("<h1>完成读取cookie的任务..</h1>");
        writer.flush();
        writer.close();
    }

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

工具类

public class CookieUtils {

    //编写一个方法,返回指定名字的cookie值
    public static Cookie readCookieByName(String name, Cookie[] cookies) {

        //判断传入的参数是否正确
        if (name == null || "".equals(name) || cookies == null || cookies.length == 0) {
            return null;
        }
        //遍历cookies
        for (Cookie cookie : cookies) {
            if(name.equals(cookie.getName())) {
                return cookie;
            }
        }
        return null;
    }
}

-修改 Cookie

public class UpdateCookie extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("UpdateCookie 被调用...");

        //需求
        /**
         * 1. 需求 演示如何修改Cookie
         * 1) 给定一个cookie的name, 找到该cookie, 如果找到, 则修改该cookie的值为 -hi
         * 2) 如果找不到指定的cookie , 则提示, 没有该cookie
         */
        //1. 根据name 去查找 cookie
        String cookieName = "emailx";
        Cookie[] cookies = request.getCookies();

        //如果我们直接创建了一个同名的cookie也相当于修改
        Cookie userNameCookie = new Cookie("username", "hahaha");


        Cookie cookie = CookieUtils.readCookieByName(cookieName, cookies);
        if (null == cookie) {//在该浏览器没有email cookie
            System.out.println("当前访问 服务端的 浏览器没有 该cookie");
        } else {
            cookie.setValue("hi");
        }
        System.out.println("=====修改后的cookies信息=======");
        //2. 编写cookie
        for (Cookie cookie1 : cookies) {
            System.out.println("cookie name= " + cookie1.getName()
                    + " value= " + cookie1.getValue());
        }

        //3. 给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        //4. 如果希望我们的浏览器本地的cookie也修改,则需要使用response.addCookie(cookie);
        if(cookie != null) {
            response.addCookie(cookie);
        }
        //把 新创建的userNameCookie 重新保存到浏览器
        //如果 保存的userNameCookie 和已经有的cookie同名,就等价于替换.
        if(userNameCookie != null) {
            response.addCookie(userNameCookie);
        }
        PrintWriter writer = response.getWriter();
        writer.println("<h1>完成修改cookie的任务..</h1>");
        writer.flush();
        writer.close();
    }

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

cookie 生命周期

介绍

1. Cookie 的生命周期指的是如何管理 Cookie 什么时候被销毁(删除)

2. setMaxAge()

                ● 正数,表示在指定的秒数后过期

                ● 负数,表示浏览器关闭,Cookie 就会被删除(默认值是-1)

                ● 0,表示马上删除 Cookie

代码示例

public class CookieLive extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("CookieLive 被调用...");

        //演示创建一个cookie , 生命周期为 60s
        Cookie cookie = new Cookie("job", "java");
        //解读:
        // 1. 从创建该cookie开始计时, 60秒后无效
        // 2. 浏览器来根据创建的时间,计时到60s秒,就认为该cookie无效
        // 3. 如果该cookie无效,那么浏览器在发出http请求时,就不在携带该cookie
        cookie.setMaxAge(60);
        //将cookie保存到浏览器
        response.addCookie(cookie);


        //演示如何删除一个cookie, 比如删除username
        //1 先得到username cookie
        Cookie[] cookies = request.getCookies();
        Cookie usernameCookie =
                CookieUtils.readCookieByName("username", cookies);
        if(usernameCookie != null) {
            //2. 将其生命周期设置为0
            usernameCookie.setMaxAge(0);
            //3. 重新保存该cookie, 因为你将其生命周期设置0, 就等价于让浏览器删除该cookie
            //4. 说明:该cookie会被浏览器直接删除
            //   返回一个Set-Cookie: xxxxx => 一会抓包.
            //   Set-Cookie: username=tom; Expires=Thu, 01-Jan-1970 00:00:10 GMT
            response.addCookie(usernameCookie);//返回一个Set-Cookie: xxxxx => 一会抓包.
        }else{
            System.out.println("没有找到该cookie, 无法删除...");
        }

        /***********************
         * 默认的会话级别的 Cookie [即浏览器关闭就销毁了]
         * 前面我们讲课时,都是默认会话级别的生命周期
         ***********************/
        Cookie cookie3 = new Cookie("dkey", "dkey_value");
        /**
         * 解读 setMaxAge源码
         * public void setMaxAge(int expiry) {
         *         this.maxAge = expiry;
         * }
         * private int maxAge = -1; 默认就是-1
         */
        //cookie.setMaxAge(-1);//设置存活时间
        response.addCookie(cookie3);


        // 给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println("<h1>设置cookie生命周期</h1>");
        writer.flush();
        writer.close();

    }

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

 3. 完成测试 , 注意抓包看数据

cookie 有效路径

有效路径规则

1. Cookie 有效路径 Path 的设置

2. Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。path属性是通过请求的地址来进行有效的过滤

3. 规则如下:

cookie1.setPath = /工程路径

cookie2.setPath = /工程路径/aaa

请求地址: http://ip:端口/工程路径/资源

cookie1 会发给服务器

cookie2 不会发给服务器

请求地址: http://ip:端口/工程路径/aaa/资源

cookie1 会发给服务器

cookie2 会发给服务器

 代码示例

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CookiePathServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Cookie cookie = new Cookie("keyPath1", "keyPath1Value");
        // request.getContextPath() + "/aaa" 得到 /工程路径/aaa
        cookie.setPath(request.getContextPath() + "/aaa");
        Cookie cookie2 = new Cookie("keyPath2", "keyPath2Value");
        cookie2.setPath(request.getContextPath());
        response.addCookie(cookie);
        response.addCookie(cookie2);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("<h1>创建 Cookie keyPath1 路径 /工程路径/aaa </h1>");
        response.getWriter().write("<h1>创建 Cookie keyPath2 路径 /工程路径 </h1>");
    }
}

3. 完成测试 , 注意抓包看创建 Cookie 时,返回的数据

 4. 完成测试 , 注意抓包看读取 Cookie 时,返回的数据

 代码示例

需求: 完成自动填写登录账户应用案例 , 如果用户登录成功,则下次登录自动填写登录 账户

html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
<h1>用户登录界面</h1>
<form action="#" method="post">
    u:<input type="text" name="username"><br/>
    p:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>

java

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //System.out.println("LoginServlet 被调用...~~~");

        //1. 接收表单提交用户名和密码
        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");

        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        //2. 判断是否合法
        if ("xxxx".equals(username) && "123456".equals(pwd)) {
            //将登录成功的用户名,以cookie的形式,保存到浏览器
            Cookie loginuserCookie = new Cookie("loginuser", username);
            //设置该cookie生命周期
            loginuserCookie.setMaxAge(3600 * 24 * 3);
            response.addCookie(loginuserCookie);
            //合法
            writer.println("<h1>登录OK</h1>");

        } else {
            //不合法
            writer.println("<h1>登录失败</h1>");
        }

        writer.flush();
        writer.close();
    }

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

Cookie 注意事项和细节

1. 一个 Cookie 只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

2. 一个 WEB 站点可以给一个浏览器发送多个 Cookie,一个浏览器也可以存储多个 WEB 站点提供的 Cookie。

3. cookie 的总数量没有限制,但是每个域名的 COOKIE 数量和每个 COOKIE 的大小是有限制的 (不同的浏览器限制不同, 知道即可) , Cookie 不适合存放数据量大的信息。

4. 注意,删除 cookie 时,path 必须一致,否则不会删除

5. Java servlet 中 cookie 中文乱码

说明 如果存放中文的 cookie, 默认报错, 可以通过 URL 编码和解码来解决, 不建议存 放中文的 cookie 信息

代码解决

设置

public class EncoderCookie extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //System.out.println("EncoderCookie 被调用");
        //1. 创建cookie, 有中文

        //1) 如果直接存放中文的cookie, 报错 Control character in cookie value or attribute.
        //2) 解决方法,就是将中文 编程成 URL编码  英文: Encode=编码
        //3) 编码后,再保存即可
        String company = URLEncoder.encode("大家好", "utf-8");

        Cookie cookie = new Cookie("company", company);
        //2. 保存到浏览器
        response.addCookie(cookie);

        //3. 给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println("<h1>设置中文cookie成功</h1>");
        writer.flush();
        writer.close();

    }

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

解码 

public class ReadCookie2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("ReadCookie2 被调用..");
        //读取到中文cookie
        Cookie[] cookies = request.getCookies();
        Cookie companyCookie = CookieUtils.readCookieByName("company",cookies);
        String companyVal = companyCookie.getValue();
        System.out.println("companyVal= " + companyVal);//URL

        //解码
        companyVal = URLDecoder.decode(companyVal, "utf-8");
        System.out.println("解码后 companyVal= " + companyVal);//中文

        //3. 给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println("<h1>读取中文cookie解码成功~</h1>");
        writer.flush();
        writer.close();
    }

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

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

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

相关文章

javaweb838仓库进销存管理系统

此系统主要分4个模块&#xff0c;分别是&#xff1a; 出库管理模块&#xff1a;对每种出库出去的商品都有相应的记录显示。 入库管理模块&#xff1a;对每种入库来的商品都有相应的记录显示&#xff0c;如果商品管理局显示某一厂家的某一种商品不符合要求&#xff0c;则在入库的…

变压器基本知识

1、高频变压器是工作频率超过中频&#xff08;10kHz&#xff09;的电源变压器&#xff0c;主要用于高频开关电源中&#xff0c;常用的工作频率是50K&#xff0c;65K。 变压器是变换交流电压、电流和阻抗的器件&#xff0c;当初级线圈中通有交流电流时&#xff0c;铁芯&#xff…

Crash工具介绍和常见命令使用

1. 介绍 本文主要介绍crash工具的使用以及常用的命令。crash工具&#xff0c;常用来分析内核的coredump以及应用的coredump&#xff0c;功能非常强大。 crash工具官方介绍 使用crash分析内核crash情况&#xff0c;需要准备以下内容&#xff1a; 内核crash时生成的coredump文…

ArcGIS发展历史及体系架构

ArcGIS是美国能源环境研究所ESRI&#xff08;Environmental Systems Research Institute&#xff09;开发的GIS软件。 1 ArcGIS软件发展历史 &#xff08;1&#xff09;ARC/INFO Workstation 1981年&#xff0c;ARC/INFO第一代商业产品发布; 1986年&#xff0c;PC版ARC/INFO问世…

2022(一等奖)D277:1998-2019年中国植被动态变化及其影响因素分析

作品介绍 1 应用背景 近半个世纪以来&#xff0c;随着全球气候变化和人类活动的双重干扰&#xff0c;自然生态系统遭到了不同程度的影响。植被作为陆地生态系统的重要组成部分&#xff0c;在陆地生态系统的物质循环和能量流动中发挥着不可替代的作用&#xff0c;是自然生态系统…

论文笔记:GhostNet: More Features from Cheap Operations

1 论文简介 论文&#xff1a;GhostNet: More Features from Cheap Operations&#xff08;华为诺亚团队&#xff09; 源代码&#xff1a;https://github.com/huawei-noah/ghostnet 2 动机 由于内存和计算资源的限制&#xff0c;在嵌入式设备上部署卷积神经网络非常困难。 本…

浅述 国产 仪器 4456系列数字荧光示波器

4456系列数字荧光示波器具有6个产品型号&#xff0c;带宽350MHz~1GHz&#xff0c;最高采样率5GSa/s&#xff0c;最大存储深度500Mpts/CH&#xff0c;最快波形捕获率100万个波形/秒&#xff0c;独创的Any Acquire Phosphor技术&#xff0c;为您提供全新的示波器使用体验。 4456…

Doris(12):高级设置

1 增大内存 内存不够时, 查询可能会出现‘Memory limit exceeded’, 这是因为doris对每个用户默认设置内存限制为 2g SHOW VARIABLES LIKE "%mem_limit%"; exec_mem_limit 的单位是 byte&#xff0c;可以通过 SET 命令改变 exec_mem_limit 的值。如改为 8GB。 SET…

《Spring MVC》 第四章 域对象、视图、转发和重定向

前言 介绍Spring MVC的域对象、视图、转发和重定向 1、域对象共享数据 Spring MVC 提供了多种域对象共享数据的方式&#xff0c;其中最常用的方式如下&#xff1a; 1.1、使用 Servlet API 向 request 域对象中共享数据 服务端代码&#xff1a; RequestMapping("toLo…

RTC音视频是什么意思?即构RTC音视频有什么优势

RTC音视频是什么意思? RTC(Real time communication)&#xff0c;是实时音视频的一个简称&#xff0c;一种给行业提供高并发、低延时、高清流畅、安全可靠的全场景、全互动、全实时的音视频服务的终端服务。但更广义的RTC技术&#xff0c;不单单局限于音视频&#xff0c;包括I…

C++ 算法进阶系列之剖析树型动态规划算法思想

1. 前言 什么是树型动态规划&#xff1f; 概念中有 2 个子概念&#xff1a; 一个是动态规划概念。动态规划可以简单理解为通过对已经计算出来的子问题的状态值进行修改(基于子问题的状态值找到当前子问题的最优值)而得到当前子问题的状态值。 Tips&#xff1a; 本文侧重于动…

数智融合,生态链接丨 亚信科技“信伙伴”交流会(成都站)成功举办

日前&#xff0c;“数智融合&#xff0c;生态链接”亚信科技“信伙伴”交流会&#xff08;成都站&#xff09;在成都希顿酒店成功举办。本次会议由四川省信创产业联盟指导&#xff0c;亚信科技AntDB数据库事业部、四川省软件行业协会联合举办。 伴随我国信息技术应用创新不断向…

探究以太坊生态系统中的Consensys:产品技术细节与应用场景介绍

文章目录 前言一. Infura1. API简介&#xff08;1&#xff09;HTTP API&#xff08;2&#xff09;WebSocket API 2. Infura优势&#xff08;1&#xff09;稳定性&#xff08;2&#xff09;易用性&#xff08;3&#xff09;免费 二、Truffle1. Truffle框架&#xff08;1&#xf…

【大数据之Hadoop】十七、MapReduce之数据清洗ETL

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程&#xff0c;目的是将分散、零乱、标准不统一的数据整合到一起&#xff0c;为决策提供分析依据。 ETL的设计分三部分&#xff1a;数据抽取、数据的清洗转换、数据的加载。 1 ETL体系结构 ETL主要是用来实现…

Python无框架分布式爬虫,爬取范例:拼多多商品详情数据,拼多多商品列表数据

拼多多是中国领先的社交电商平台之一&#xff0c;是一家以“团购折扣”为主要运营模式的电商平台。该平台上有海量的商品&#xff0c;对于商家和消费者来说都具有非常大的价值&#xff0c;因此&#xff0c;拼多多商品数据的采集技术非常重要。本文将介绍拼多多商品数据的采集技…

元宇宙资讯|消息称苹果 MR 头显发售要等到 2025 年

长期担任苹果分析师的吉恩・蒙斯特 (Gene Munster) 表示&#xff0c;尽管该公司可能永远不会使用“元宇宙”这个词&#xff0c;但苹果公司的混合现实耳机将是对元宇宙的认可。 深水资产管理公司 (Deepwater Asset Management) 的管理合伙人吉恩・蒙斯特 (Gene Munster) 在周三表…

【系统安全及应用2】

目录 一、开关机安全控制二、终端登录安全控制2.1、限制root只在安全终端登录2.2、如何限制虚拟终端2.3、禁止普通用户登录 三、系统弱口令检测3.1、Joth the Ripper&#xff0c;简称为 JR 四、网络端口扫描4.1、NMAP4.2、nmap的使用nmap的常用选项netstat常用选项 一、开关机安…

【C++初阶】C++入门(二):引用内联函数auto关键字范围for循环(C++11)指针空值nullptr

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C初阶】…

【pinia】新一代更好用的状态管理器Pinia

目录 一&#xff0c;Pinia状态管理库 1.Pinia介绍 2.Pinia的核心特性 3.核心概念 4.Pinia vs Vuex 5.Pinia & Vuex的不同 6.Pinia名字 二&#xff0c;Pinia基本使用 1.安装Pinia 2.配置main.ts文件 3.创建store/index.ts文件 4.使用数据 三&#xff0c;状态更新…

再获CSA大奖!顺丰科技腾讯安全iOA零信任联合方案获认可

随着千行百业数字化转型的加速&#xff0c;远程办公、业务协同、分支互联等需求涌现&#xff0c;传统的基于边界的网络安全防护理念难以有效抵挡层出不穷的威胁攻击&#xff0c;基于“无边界安全”理念的零信任技术模型逐渐成为企业关注的重点。 近日&#xff0c;第六届云安全…