前言:

  • session 和cookie都是为了保持服务器和客户端之间交互状态。如果一天的PV有几亿,而一个cookie占200个字节但是也会占用很多带宽?所以大访问量就引用session,但是几百台服务器集群之间 有无法实现共享session。

理解Cookie

  • 简单来说就是用户通过HTTP去访问服务器,然后服务器会返回一些key/value的数据给用户端,同时给这些数据加上一些限制条件,当用户再次访问服务器时,只要条件满足时就会被重新返回给服务器。W3C设计cookie最初是为了应对HTTP这种无状态协议去区分不同用户的,现在cookie也可以被用作服务器数据缓存判断的依据。
  • cookie属性项 ,目前分为了version0 和version1两个版本,常用的有max-age ,domain,expires,path等等,在Javaweb的servlet规范中,我们常用的set-cookie:user-name='hakulamatata';max-Age="1000"。
  • 客户端和服务端交互时,不需要每次都传递这么多次cookie ,这么做无疑是增加数据传输量。所以当客户端第一次连接到服务端,服务器会生成一个每个客户端唯一的ID,这个ID就是客户端保存着的 NAME =JSESIONID 的cookie,每次交互就把这个cookie id发过去 便于服务器识别。
  • 使用cookie的限制,虽然HTTP协议对于cookie的数量和占用空间大小是没有限制的,但是现代基本浏览器(主要指支持html5的浏览器) 对于数量限制基本都是每个域名不超过50个 ,占用空间而言 基本除了谷歌是 80000个字节,其他都是4095个字节。
  • cookie安全问题:容易想到既然cookie保存在客户端,就难免被他人利用篡改或者进行其他我们预料之外的操作,相比而言存放在服务端的 session就安全些,所以一些敏感信息 更适于存放在session里。
  • cookie压缩问题。如果大型网站PV上亿的那种,带宽和流量而言,压缩cookie很有必要,而根据cookie的规范 ,cookie只能是ASCII码为34-126的可见字符,所以我们必须使用Base64进行编解码,然后再利用gzip和deflate等压缩算法进行压缩,节省流量带宽成本。

理解session

  • 前面讲过,web交互过程中不可能每次都把cookie都传回服务端,而是用一个 jesesionid的id 的cookie,这是session 的一种方式,还有基于 url 这两个都是默认支持的,最后还有一个是SSL的,这个不是默认支持的。当web.xml 配置了 session就会 以配置的 为sessionid,没配置就是以默认的jesesionid 为准,而url 则是以url传回的K-V键值对为依据构建 sessionid,而最后一种特殊情况就是 javax.servlet.request.ssl_session属性值设置 sessionid。

Session 如何工作

  • 有了sessionid对象就可以去创建httpsesion对象了,第一次通过 request.getsession()方法,如果没有就创建新的,然后放到sessionmanager里面去管理,过期的就关闭,服务器关闭时就持久化到磁盘,只要有这个HTTPsession对象客户就可以获取这个对象,也就实现HTTP协议本身无状态,到技术实现其有状态的过程。

扩展问题

  • 表单重复提交:就是在用户请求,在表单隐藏域中添加一个根据某个种子生成的随机数,也就是 token ,然后存放在session中,当用户提交表单时,在和这个存放在session中的对比,如果不同就是重复提交,如图

  • 多端session统一:主要涉及多端共享session,其次就是如图过程。

Java Web 深入分析(9) Session 和 Cookie的更多相关文章

  1. Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

  2. Java Web(三) 会话机制,Cookie和Session详解

    很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...

  3. Java Web(三) 会话机制,Cookie和Session详解(转载)

    https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...

  4. java web 学习十一(使用cookie进行会话管理)

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  5. [原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. A candidate solution for Java Web Application - current session

    Motivation Do it once, resue for ever. Audience myself, Java Web developers Scope 应用案例 图书借阅系统 阶段1需求: ...

  7. web 开发常见问题--Session 与 Cookie 却别

    总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...

  8. Java Web 深入分析(6) Tomcat

    tomcat是什么:汤姆猫?Javaweb服务器? Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache ...

  9. JSON WEB TOKEN - 告别session和cookie - java demo

    JWT简介 JWT认证流程: 用户登录成功,生成token,返回一个对象(包含token,用户名) 每次请求都带上这个对象(通过js存储在电脑) jwt过滤器会校验token解密之后的name是否和用 ...

随机推荐

  1. [Oracle] Oracle中和MySql的limit对应的方法

    MySql很贴心,有个限制范围查询的limit函数,用起来也很方便,SQL不用嵌套.如下: select id,name,age,cdate as ctime from emp order by id ...

  2. 【边缘计算】 Edge Computing: Vision and Challenges

    原文地址: http://www.cs.wayne.edu/~weisong/papers/shi16-edge-computing.pdf ----------------------------- ...

  3. LeetCode_125. Valid Palindrome

    125. Valid Palindrome Easy Given a string, determine if it is a palindrome, considering only alphanu ...

  4. 【C#设计模式1】单例模式

    一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计模式>,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了 ...

  5. 在Win7环境下搭建Geant4工作平台

    本物理专业小硕,现在材料实验室工作,研究方向大概是核屏蔽材料的软件模拟吧.其实实验室里大多数师兄弟都是搞焊接的,平时能接触到这类直接给源码自己编译的软件的机会基本为零,所以一切都靠自己探索,成功搭建了 ...

  6. 最新 美柚java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 美柚等10家互联网公司的校招Offer,因为某些自身原因最终选择了 美柚.6.7月主要是做系统复习.项目复盘.LeetCo ...

  7. 在同一个页面多次调用el-select选择器

    elementui是一个十分好用的组件库,但毕竟也不能做到面面俱到,有些还是要根据根据自己的实际需求做一些自定义的方法. 比如el-select选择器在同一个页面使用多次的话就会造成选择一个另一个也会 ...

  8. 学习笔记:oracle之win10安装卸载oracle 11gR2步骤及常见问题解决

    1.win10下安装oracle11g 1.1 工具原料 oracle11g安装包(64位) 1.2 步骤方法 1.在Oracle官网下载安装包,下载后,得到的文件如图所示: 2.将两个文件进行解压缩 ...

  9. [转帖]Oracle报错ORA-26563--当重命名表时碰到物化视图

    Oracle报错ORA-26563--当重命名表时碰到物化视图 https://www.toutiao.com/i6739137279115133447/ 原创 波波说运维 2019-09-26 00 ...

  10. JVM -- 虚拟机中的对象

    一.HotSpot虚拟机 它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机.我们大致知道虚拟机内存的概况,也许更想了解这些虚拟机内存的数据的其他细节,誓如它们是如 ...