Young Kbt blog Young Kbt blog
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)

Shp Liu

朝圣的使徒,正在走向编程的至高殿堂!
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)
  • Java 基础 - SE

  • Java 进阶 - SE

  • Java 集合 - Collection

  • Java 并发 - JUC

  • Java 容器 - Web

    • JavaWeb - 基本概念
    • JavaWeb - Tomcat
    • JavaWeb - Http
    • JavaWeb - Maven
    • JavaWeb - Servlet
    • JavaWeb - Cookie 和 Session
      • JavaWeb - 其它总览
    • Java 底层 - JVM

    • Java 版本 - 新特性

    • Java
    • Java 容器 - Web
    Young Kbt
    2021-10-24
    目录

    JavaWeb - Cookie 和 Session

    • 会话
    • 保存会话的两种技术
    • Cookie
    • Session

    # 会话

    会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;

    有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;

    你能怎么证明你是西开的学生?

    你 西开

    1. 发票 西开给你发票
    2. 学校登记 西开标记你来过了

    一个网站,怎么证明你来过?

    客户端 服务端

    1. 服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了; cookie
    2. 服务器登记你来过了,下次你来的时候我来匹配你; seesion

    # 保存会话的两种技术

    cookie

    • 客户端技术 (响应,请求)

    session

    • 服务器技术,利用这个技术,可以保存用户的会话信息? 我们可以把信息或者数据放在Session中!

    常见常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!

    # Cookie

    1568344447291

    1. 从请求中拿到cookie信息
    2. 服务器响应给客户端cookie
    Cookie[] cookies = req.getCookies(); //获得Cookie
    cookie.getName(); //获得cookie中的key
    cookie.getValue(); //获得cookie中的vlaue
    new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
    cookie.setMaxAge(24*60*60); //设置cookie的有效期
    resp.addCookie(cookie); //响应给客户端一个cookie
    
    1
    2
    3
    4
    5
    6

    cookie:一般会保存在本地的 用户目录下 appdata;

    一个网站cookie是否存在上限!聊聊细节问题

    • 一个Cookie只能保存一个信息;
    • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
    • Cookie大小有限制4kb;
    • 300个cookie浏览器上限

    删除Cookie;

    • 不设置有效期,关闭浏览器,自动失效;
    • 设置有效期时间为 0 ;

    编码解码:

    URLEncoder.encode("秦疆","utf-8")
    URLDecoder.decode(cookie.getValue(),"UTF-8")
    
    1
    2

    # Session

    1568344560794

    什么是Session:

    • 服务器会给每一个用户(浏览器)创建一个Seesion对象;
    • 一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
    • 用户登录之后,整个网站它都可以访问!--> 保存用户的信息;保存购物车的信息…..

    1568342773861

    Session和cookie的区别:

    • Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个)
    • Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费)
    • Session对象由服务创建;

    使用场景:

    • 保存一个登录用户的信息;
    • 购物车信息;
    • 在整个网站中经常会使用的数据,我们将它保存在Session中;

    使用Session:

    package com.kuang.servlet;
    
    import com.kuang.pojo.Person;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class SessionDemo01 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            
            //解决乱码问题
            req.setCharacterEncoding("UTF-8");
            resp.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html;charset=utf-8");
            
            //得到Session
            HttpSession session = req.getSession();
            //给Session中存东西
            session.setAttribute("name",new Person("秦疆",1));
            //获取Session的ID
            String sessionId = session.getId();
    
            //判断Session是不是新创建
            if (session.isNew()){
                resp.getWriter().write("session创建成功,ID:"+sessionId);
            }else {
                resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
            }
    
            //Session创建的时候做了什么事情;
    //        Cookie cookie = new Cookie("JSESSIONID",sessionId);
    //        resp.addCookie(cookie);
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    //得到Session
    HttpSession session = req.getSession();
    
    Person person = (Person) session.getAttribute("name");
    
    System.out.println(person.toString());
    
    HttpSession session = req.getSession();
    session.removeAttribute("name");
    //手动注销Session
    session.invalidate();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54

    会话自动过期:web.xml配置

    <!--设置Session默认的失效时间-->
    <session-config>
        <!--15分钟后Session自动失效,以分钟为单位-->
        <session-timeout>15</session-timeout>
    </session-config>
    
    1
    2
    3
    4
    5

    1568344679763

    编辑此页 (opens new window)
    #web
    更新时间: 2024/11/02, 18:07:00
    JavaWeb - Servlet
    JavaWeb - 其它总览

    ← JavaWeb - Servlet JavaWeb - 其它总览→

    最近更新
    01
    技术随笔 - Element Plus 修改包名 原创
    11-02
    02
    Reactor - 扩展性
    11-02
    03
    Reactor - 最佳实践
    11-02
    更多文章>
    Theme by Vdoing | Copyright © 2021-2024 Young Kbt | blog
    桂ICP备2021009994号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式