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. 第80讲:List的泛型分析以及::类和Nil对象

    今天我们学习一下scala中的列表,List. 通过源码,我们可以发现,List类型是协变的,所以我们可以把Int类型的List赋值给Any型的List. 我们可以看到,List定义下有3个比较重要的 ...

  2. nodeclub models

    之前看过keystone的结构,所以现在看nodeclub时,总会和keystone进行比较. nodeclub models会有一个index来作为facade,通过它连接mongodb,expor ...

  3. IT项目管理流程以及每个步骤用到的文档

    IT项目管理从大的方面可分为:1)项目启动阶段:2)项目计划阶段:3)项目的实施阶段:4)项目的结项阶段 1)项目启动阶段: 1.项目启动流程规范: 1.1项目启动的简介.目的和范围 1.2目的可行性 ...

  4. less(css)语言快速入门

    转载 原文地址:https://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/ 简介 CSS(层叠样式表)是一门历史悠久的标记性语言,同 ...

  5. 修复msvcp120.dll

    https://www.microsoft.com/zh-CN/download/details.aspx?id=40784

  6. mantis邮件设置

     1.cd /var/www/html/mantis     删除 config_inc.php  的$g_enable_email_notification    = OFF;    重启httpd ...

  7. ios调用系统界面显示英文

    调用系统相册界面 UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType ...

  8. MVC+Nhibernate+spring.net(三)

    当前层次已经分好 分层架构 画的不是太好啊,后面我会上代码,大家先将就着看吧. 现在开始搭建spring 搭建spring首先引用类库文件: spring.AopSpring.Corespring.W ...

  9. Http/Https抓包工具Charles最新版破解教程(Windows|Mac)

    Charles介绍 Charles是一款强大的http/https抓包工具,可以抓取各种数据请求,查看请求的头信息,请求信息,返回信息等.本文主要介绍Charles的破解过程,包括Windows平台和 ...

  10. springboot2 生产部署注意事项【持续更新】

    注意事项1. 去除不需要的 jar 开发工具 jar :springs-boot-devtools2. 监控一定要做好权限制或者去除 控制 jar :spring-boot-starter-actua ...