• Cookie&Session小结


    Cookie&Session小结

    会话

    会话管理分类
    • Cookie:客户端会话管理技术

      • 把要共享的数据保存到客户端。

      • 每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享!

    • Session:服务器端会话管理技术

      • 本质也是采用客户端会话管理技术。

      • 只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。

      • 每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!

    cookie

    什么是cookie?作用是什么?

    • Cookie:客户端会话管理技术

      • 把要共享的数据保存到客户端(浏览器)

      • 每次请求时,浏览器会把会话信息带到服务器端,从而实现多次请求的数据共享

    • 作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率!

    • cookie介绍

       Cookie执行流程原理:

    coolie常见属性?

    属性名称属性作用是否重要
    name cookie的名称 必要属性
    value cookie的值(不能是中文) 必要属性
    path cookie的路径 重要
    domain cookie的域名 重要
    maxAge cookie的生存时间 重要
    version cookie的版本号 不重要
    comment cookie的说明 不重要

    细节:

    Cookie有大小,个数限制。每个网站最多只能存20个cookie,且大小不能超过4kb。同时,所有网站的cookie总数不超过300个。

    当删除Cookie时,设置maxAge值为0。当不设置maxAge时,使用的是浏览器的内存,当关闭浏览器之后,cookie将丢失。设置了此值,就会保存成缓存文件(值必须是大于0的,以秒为单位)。

    cookie的方法和添加获取

    cookie方法

    方法名作用
    Cookie(String name,Stringvalue) 构造方法创建对象
    属性对应的set和get方法 赋值和获取值

    添加:

    HttpServletResponse对象中提供了addCookie()方法

    返回值方法名说明
    void addCookie(Cookie cookie) 向客户端添加Cookie

    获取:

    HttpServletRequest对象中提供了getCookies()方法

    返回值方法名说明
    Cookie[] getCookies(Cookie cookie) 获取所有的Cookie

    为什么添加Cookie是响应对象,获取Cookie是请求对象?

    • 因为cookie是通过服务器端代码将数据保存在浏览器,所以服务器让浏览器做一件事情,肯定是通过响应,而在浏览器存储的数据,要想告诉服务器都有什么,那肯定是通过请求

     

    Cookie的使用细节

    • 数量限制

      • 每个网站最多只能有 20 个 Cookie,且大小不能超过 4KB。所有网站的 Cookie 总数不能超过 300 个。

    • 名称限制

      • Cookie 的名称只能包含 ASCCI 码表中的字母、数字字符。不能包含逗号、分号、空格,不能以 $ 开头。

      • Cookie 的值不支持中文。

    • 存活时间限制 setMaxAge() 方法接收数字

      • 负整数:当前会话有效,浏览器关闭则清除。

      • 0:立即清除。

      • 正整数:以秒为单位设置存活时间。

    • 访问路径限制

      • 默认路径:取自第一次访问的资源路径前缀。只要以这个路径开头就能访问到

      • 设置路径:setPath() 方法设置指定路径

    设置Cookie最大存活时间

    cookie.setMaxAge(0); // 立即清除

    Cookie路径限制

    • 取自第一次访问的资源路径前缀

    • 只要以这个前缀为开头(包括子级路径)就可以获取到

    • 反之获取不到

    session

    session执行流程:

    什么是HttpSession?作用是什么?

    服务器端会话管理技术

    • 本质也是采用客户端会话管理技术

    • 只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中

    • 每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享

    • 是 Servlet 规范中四大域对象之一的会话域对象

    • 作用:可以实现数据共享

    • 为了防止在 一次会话中,让用户多次登录(用户登录状态)

    HttpSession的方法

     Httpsession常用方法

    返回值方法名说明
    void setAttribute(String name,Object value) 设置共享数据
    Object getAttribute(String name) 获取共享数据
    void removeAttribute(String name) 移除共享数据
    String getId() 获取唯一标识名称
    void Invalidate() 让session立即失效

    HttpSession的获取

    获取HttpSession是通过HttpServletRequest接口中的两个方法获取的

    返回值方法名说明
    HttpSession getSession() 获取HttpSession对象
    HttpSession getSession(boolean create) 获取HttpSession对象,对未获取到的是否创建(默认为true)

    HttpSession的钝化和活化

    • 什么是钝化和活化

      • 钝化:序列化。把长时间不用,但还不到过期时间的 HttpSession 进行序列化,写到磁盘上

      • 活化:相反的状态

    • 何时钝化

      • 第一种情况:当访问量很大时,服务器会根据 getLastAccessTime 来进行排序,

        对长时间不用,但是还没到过期时间的 HttpSession 进行序列化。

      • 第二种情况:当服务器进行重启的时候,为了保持客户 HttpSession 中的数据,也要对其进行序列化

    • 注意

      • HttpSession 的序列化由服务器自动完成,我们无需关心

     

    四大域对象

    域对象名称范围级别备注
    PageContext 页面范围 最小,只能在当前页面用 因范围太小,开发中用的很少
    ServletRequest 请求范围 一次请求或当期请求转发用 当请求转发之后,再次转发时请求域丢失
    HttpSession 会话范围 多次请求数据共享时使用 多次请求共享数据,但不同的客户端不能共享
    ServletContext 应用范围 最大,整个应用都可以使用 尽量少用,如果对数据有修改需要做同步处理
  • 相关阅读:
    QEMU内存分析(四):ept页表构建
    virtio简介(二) —— virtioballoon guest侧驱动
    将数据库所有的表的字符集改为utf8
    windows 10 mysql 安装
    Windows10 安装MySQL详细教程2020版 亲测亲写
    发现了一个可以免费下载jar包的网站,所有jar包都有
    我的新书《Flink大数据分析实战》出版啦
    2022最新 Navicat Premium 16中文软件激活安装永久使用正版(支持MAC+win)
    Adobe全家桶PS、PR、AU等2022正版永久有效,无需破解直接安装就能用
    虚拟机问题:VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行
  • 原文地址:https://www.cnblogs.com/859630097com/p/14310308.html
Copyright © 2020-2023  润新知