• 会话技术


    一 会话技术简介

    会话: 一次会话中包含多次请求和响应

    一次会话: 客户端第一次给服务器发送请求 会话建立 直到有一方断开为止

    功能: 在一次会话范围内的多次请求间 共享数据

    方式: 客户端会话技术Cookie 服务端会话技术Session

    二 Cookie

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

    1. 快速入门

    a. 创建Cookie 绑定数据

      new Cookie(String name, String value)

    b. 发送Cookie

      HttpServletResponse#addCookie(Cookie cookie)

    c. 获取Cookie 拿到数据

      HttpServletRequest#getCookies() -> Cookie[]

    2. 实现原理

    基于响应头Set-Cookie和请求头Cookie实现

    3. Cookie细节

    a. 可以创建多个Cookie对象 使用response多次调用addCookie() 发送多个Cookie

    b. 默认情况下 当客户端关闭后 Cookie数据被销毁 使用Cookie#setMaxAge(int expiry) 可以持久化存储 expiry=负数是默认值 expiry=0是删除Cookie信息 expiry=正数是存活时间(单位秒)

    c. 在tomcat8之前 Cookie不支持中文数据 在tomcat8之后 Cookie支持中文数据 但是特殊字符还是不支持 所以建议都使用URL编码存储

    d. Cookie共享问题

      1> 在一个tomcat服务器中 部署了多个web项目 默认情况下Cookie不能共享 使用Cookie#setPath("/") 可以共享Cookie

      2> 不同tomcat服务器间 默认情况下Cookie不能共享 使用Cookie#setDomain(".qq.com") 可以共享Cookie(一级域名必须相同)

    4. Cookie特点

    a. Cookie存储数据在客户端

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

    5. Cookie功能

    a. Cookie一般用于存储少量的不太敏感的数据

    b. 在不登录的情况下 完成服务器对客户端的身份识别

    三 Session

    服务端会话技术 将数据保存到服务端

    1. 快速入门

    a. 获取HttpSession

      HttpServletRequest#getSession() -> HttpSession

    b. 使用HttpSession

      存储数据 void setAttribute(String name, Object value)

      通过键获取值 Object getAttribute(String name)

      通过键移除值 void removeAttribute(String name)

    2. 实现原理

    Session的实现依赖于Cookie

    3. Session细节

    a. 当客户端关闭后 服务器不关闭 两次获取Session 默认情况下不是同一个 如果需要相同 可以创建Cookie("JSESSIONID", session.getId()) 设置最大存活时间 让Cookie持久化保存

    b. 当客户端不关闭 服务器关闭后 两次获取Session 不是同一个 但是要确保数据不丢失 tomcat自动完成以下工作

      1> Session钝化: 在服务器正常关闭之前 将Session对象序列化到硬盘上

      2> Session活化: 在服务器启动后 将Session文件转化为内存中的Session对象

    c. Session什么时候被销毁

      1> 服务器关闭

      2> Session#invalidate()

      3> Session默认失效时间是30分钟 可以选择性配置修改 在tomcat/conf/web.xml中 <session-config>节点下

    4. Session特点

    a. Session存储数据在服务端

    b. Session可以存储任意类型 任意大小的数据

    5. Session功能

    a. 共享数据

    域对象: 一个有作用范围的对象 可以在范围内共享数据

    Session域: 代表一次会话的范围

      存储数据 void setAttribute(String name, Object obj)

      通过键获取值 Object getAttribute(String name)

      通过键移除值 void removeAttribute(String name)

  • 相关阅读:
    如何用代码来修改目录的权限
    php广告显示设置存放记录的目录代码
    本函数用来改变目前 php 执行的目录到新的 directory 目录中
    for循环的时候是按照数字递增会造成一些元素被遗漏
    php常用的对字符串进行加密的算法
    关于如何用php 获取当前脚本的url
    将正确的 HTTP 头转发给后端服务器的一些问题
    应用服务器上部署自己的 blog 和 wiki 组件。
    PHP统计字符串里单词查询关键字
    (在线工具)JSON字符串转换成Java实体类(POJO)
  • 原文地址:https://www.cnblogs.com/huangyi-427/p/13253508.html
Copyright © 2020-2023  润新知