Cookie 

 Cookie的作用,就是当一个用户通过http访问一个服务器时,这个服务器会将一些key/value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户访问该服务器时,数据又被完整的带回服务器,因此服务器可以根据Cookie值来划分访问的用户。

当前Cookie有两种版本:Version0 和Version1, 它们有两种设置响应头的标识,分别是"Set-Cookie" 和 "Set-Cookie2"。

Version 0属性介绍:

属性项 属性项介绍
NAME=VALUE 键值对
Expires 过期时间
Domain 生成该Cookie的域名
Path 生成Cookie的路径
Secure 如果设置了该属性,只有在SSH连接时才回传该Cookie

Version 1属性介绍: 和Version 0差不多,有几个新属性:Max-Age(最大失效时间)、Port(该Cookie在什么端口可以回传服务器端)。

Cookie的工作原理

服务器端通过request.getCookies()获取Cookie数组。通过response.addCookie("key", "val")添加key/value值,最后通过response.getHeaders("Set-Cookie")返回Cookie。

Cookie是HTTP头的一个字段,但是http对该字段没有太多限制,由于最终Cookie存储在浏览器里,所以不同浏览器对Cookie都有一些限制。

Session

  Cookie可以让服务器端程序跟踪每个客户端的访问,但是每次客户端的访问必须回传这些Cookie,如果Cookie很多,则无形中增加了客户端和服务器端的数据传输量,消耗传输带宽,而Session的出现正是为了解决这个问题。

同一个客户端每次与服务器端交互时,不需要每次都回传所有的Cookie值,只需要回传NAME为JESIONID的Cookie,这个ID是客户端第一次访问服务器时生成的,可以唯一标识一个客户端。

Session的三种实现方式

  • 基于URL Path Parameter,默认支持: 当浏览器不支持Cookie功能时,浏览器将用户的SessionCookieName重写到用户请求的URL参数中
  • 基于Cookie,如果没有修改Context容器的Cookie标识,默认也支持 : 优先级别高,Cookie的Session ID会覆盖第一种方式URL中的Session ID。
  • 基于SSL,默认不支持,只有connector.getAttribute("SSLEnabled")为TRUE时才支持。

Session的工作流程

获取Session ID后,服务器端可以创建HttpSession对象,第一次触发通过request.getSession()方法。如果当前的Session ID还没有对应的HttpSession对象,则创建一个新的HttpSession对象,并把它加入到org.apache.catalina.Manager 的Session容器中保存。Manager类将管理所有Session的生命周期,Session过期将被回收,服务器关闭时,如果Session还没有过期则会被序列化到磁盘,只要这个HttpSession对象存在,用户就可以根据Session ID来获取这个对象,就做到了对状态的保持。

Cookie和Session的安全问题  

Cookie的所有数据均存储在客户端的浏览器里,因此Cookie数据可以被访问到并且可以被修改,因此它的安全性不高。相比较而言,Session的安全性要高很多。因为Session将数据存储在服务端,只是通过Cookie传递一个Session ID而已,所以Session更适合存储用户隐私和重要的数据。

分布式Session框架

在大型互联网系统中,单独使用Cookie和Session都是不可行的。因为如果单独使用Cookie,则可以很好地解决应用的分布式部署问题,大型互联网系统的一个应用有上百台机器,而且有很多不同的应用系统协同工作,由于Cookie值存储在客户端的浏览器里,用户每次访问都会将最新的值带回给处理该请求的服务器,所以也就解决了同一个用户的请求可能不在同一台服务器处理而导致的Cookie不一致的问题。但是考虑到客户端对Cookie存储的限制、Cookie管理的混乱和令人担忧的安全性,Cookie并不是最佳的解决方案。

使用服务订阅服务器,在应用启动时可以从该服务器订阅该应用需要的可写Session项和可写Cookie项配置,用来精确控制哪些应用可以操作哪些Session和Cookie,可以有效控制Session安全性和Cookie的数量。Zookeeper集群管理服务器就可以统一管理所有服务器的配置文件。

由于Session存储在服务器端,考虑带同一个应用可能会部署在多台服务器上,要实现同一个应用的多服务器共享Session必须将它们存储在一个分布式缓存中,可以随时写入和读取,同时还需要良好的性能支持。MemCache和淘宝开源的分布式缓存系统Tair就可以满足要求。

浅析Session和Cookie的更多相关文章

  1. 浅析Django之session与cookie

    浅析Django之session与cookie 1 session与cookie概述 原理: 由于HTTP协议是无状态,无连接的,当用户发起网路请求时,需要服务端能标识用户ID,用以存储用户相关信息, ...

  2. 浅析session&cookie

    session&cookie没有出现的黑暗时代 大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点 ...

  3. 浅析PHP中cookie与session技术

    1.cookie是什么? cookie指某些站点为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 通俗来理解就是,你去一个专卖店或者超市买东西,然后店里给你办一张 ...

  4. 理解Session与Cookie

    写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...

  5. PHP之session与cookie

    1.session与cookie的关系 众所周知,session是存储在服务器端,cookie是存储在客户端,如果禁用了浏览器的cookie功能,很多时候(除非进行了特殊配置)服务器端就无法再读取se ...

  6. 安全退出,清空Session或Cookie

    概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击 ...

  7. 11月7日上午PHP会话控制(session和cookie)、跨页面传值

    1.session  登录上一个页面以后,长时间没有操作,刷新页面以后需要重新登录. 特点:(1)session是存储在服务器:   (2)session每个人(登陆者)存一份: (3)session ...

  8. 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session

    什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...

  9. Session与Cookie概念

    摘:一.Session机制session是一种服务器端的状态管理技术,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务 ...

随机推荐

  1. stm32的gpio函数介绍

    一.gpio_init函数 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 调用时的格式一般是例如 RCC ...

  2. noah

    1.url:controller/method 2.在index.php中设置display_errors:1 能看到错误提示

  3. 异步多线程 ASP.NET 同步调用异步 使用Result产生死锁

    一个方法调用了async方法,要将这个方法本身设计为async. public class BlogController : Controller { public async Task<Act ...

  4. 8.css内容移出与精灵图

    定位的盒子居中显示 ★:margin:0 auto;  只能让标准流的盒子居中对齐. ★定位的盒子居中:先左右走父元素盒子的一半50%,在向左走子盒子的一半(margin-left:负值.) 标签包含 ...

  5. HyperServer 中的 SSL 支持

    HyperServer 中的 SSL 支持 DLL 模式不需要 SSL 配置, 因为 web 服务器 (如 IIS) 将承担 ssl 配置和 ssl 证书的责任. 对于独立和服务模式, ssl 配置是 ...

  6. 关于tableview下拉刷新崩溃的问题

    逻辑应该是这样的:1. 下拉2. 达到下拉临界值以后再请求网络数据3. 待数据加载到本地以后才更新 data source4. reload tableview 如果先清空再下拉,后果就是往下拉的距离 ...

  7. nips 2016 吴恩达

    一年一度的 NIPS 又来了.今年举办地是笔者最爱的欧洲城市巴塞罗那.阳光沙滩配学术,确实很爽.这次的会议的第一天开场的大部分时间安排给了 tutorial.其中人数爆满的依旧是吴恩达(AndrewN ...

  8. UWP FillRowViewPanel

    最近有童鞋有这种需求,说实话我不知道这个Panel怎么起名字. 效果连接https://tuchong.com/tags/风光/ 下面是我做成的效果,可以规定每个Row的Items个数 2个 3个 4 ...

  9. 关于SpringBoot开发微信模板推送

    在这里演示一下微信的模板消息推送: 这里使用微信测试号 来演示: 先看下效果吧: 1.首先需要申请一个  微信测试号   https://mp.weixin.qq.com/wiki?t=resourc ...

  10. 讲讲我当年是怎么拿到AI研发公司offer的

    前言 很多的老铁私信问我,当年我是怎么拿到公司offer的,我记得我毕业是2015年,那时人工智能这个行业还没热起来,能提供的岗位很少但是面试的人更少,我又是本专业毕业的,所以当初找工作还算顺利,去面 ...