Java Web 深入分析(9) Session 和 Cookie
前言:
- 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的更多相关文章
- Java Web Application使Session永不失效(利用cookie隐藏登录)
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- java web 学习十一(使用cookie进行会话管理)
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- [原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- A candidate solution for Java Web Application - current session
Motivation Do it once, resue for ever. Audience myself, Java Web developers Scope 应用案例 图书借阅系统 阶段1需求: ...
- web 开发常见问题--Session 与 Cookie 却别
总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...
- Java Web 深入分析(6) Tomcat
tomcat是什么:汤姆猫?Javaweb服务器? Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache ...
- JSON WEB TOKEN - 告别session和cookie - java demo
JWT简介 JWT认证流程: 用户登录成功,生成token,返回一个对象(包含token,用户名) 每次请求都带上这个对象(通过js存储在电脑) jwt过滤器会校验token解密之后的name是否和用 ...
随机推荐
- [Java复习] 分布式高可用-Hystrix
什么是Hystrix? Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制. Hystrix 的设计原则 对依赖服务调用时出现的调用延迟和调用失败进 ...
- jar启动脚本shell
#!/bin/bash#这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=/opt/server/msp/health-api/health-2.0.2.jar#使用说明,用来提示输入 ...
- TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
TweenJS类库主要用来调整和动画HTML5和Javascript属性,提供了简单并且强大的tweening接口. http://www.createjs.cc/tweenjs/ http://ww ...
- c# 调用mysql数据库验证用户名和密码
使用mysql数据库验证用户名和密码时,如果用户名是中文,一直查不到数据 需要把app.config 中修改为 数据库统一设置utf8编码格式,连接数据库的时候设置编码Charset=utf8可以避免 ...
- iOS-NSNotification本地推送、远程推送
//一个完整的通知一般包含3个属性: - (NSString *)name; // 通知的名称 - (id)object; // 通知发布者(是谁要发布通知) - (NSDictionary *)us ...
- 调用API修改Ocelot的配置文件
Ocelot是一个基于.net core的开源webapi服务网关开源项目,功能比较强大,Github项目地址为:https://github.com/ThreeMammals/Ocelot,关于Oc ...
- 2019-10-24 李宗盛 spss作业
3.1数据排序. 在统计分析时最初的变量. 可能不符合统计分析的要求,需要用户对目标数据进行整理,来符合分析方法个案排序.数据——个案排序.排序依据,排序顺序,变量排序 数据——变量排序 变量视图 ...
- 移动架构-AOP面向切面编程
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...
- [转帖]从零开始入门 K8s:应用编排与管理:Job & DaemonSet
从零开始入门 K8s:应用编排与管理:Job & DaemonSet https://www.infoq.cn/article/KceOuuS7somCYbfuykRG 陈显鹭 阅读数:193 ...
- 数据库数据生成Excel表格(多用在导出数据)
最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...