引语:cookie和session在网站开发中,起着无可厚非的重要作用,但是我们平时往往都只是通过某种语言作为介质,通过某些接口函数进行cookie和session的操作,而对其原理可能不了解或一知半解。这样的话,对于一个真正的懂技术的人来说,也算是一种遗憾吧。虽然网络上有许多的关于cookie和session的文章,但是我始终相信,一万个读者就有一万个哈姆雷特,我也只是其中一个读者,我希望站在一个独立的角度去解说这个问题,希望对某些好奇的朋友或者想了解的朋友,作为参考!

本文以Q&A来解说问题,我相信会更容易理解更有意思!

  Session 与 Cookie 都是为了保持访问用户与后端服务器的交互状态的介质。

1. 什么是Cookie?

  Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

  cookie何时生成?Cookie实际上是一小段的文本信息,是一本地存储技术。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

  cookie应注意什么?Cookie功能需要浏览器的支持。如果浏览器不支持Cookie(如大部分手机中的浏览器)或者把Cookie禁用了,Cookie功能就会失效。不同的浏览器采用不同的方式保存Cookie。如IE浏览器会在“C:\Documents and Settings\你的用户名\Cookies”文件夹下以文本文件形式保存,一个文本文件保存一个Cookie。

  Cookie的安全性?cookie具有不可跨域名性,根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。但是,在客户端的数据毕竟是不可靠的,一般只用于存储一些不太重要的数据!

  cookie是何时被删除的?不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。     

2. 什么是Session?
  Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。session是服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息的。

  session何时生成?Session在用户第一次访问服务器的时候自动创建。需要注意只有访问动态程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
  session应注意什么?Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。而且如果有多台web服务器的话,必须要考虑如何共享session的问题!

  session的安全性?session存放在服务器端,一般来说,还是很安全的!

  session是何时被删除的?Session长期不被使用,超过了超时时间没访问过服务器,Session就自动失效了(原理是被某进程清理干掉了)。

3. PHP中的session cookie原理?

  PHP在http 协议的头信息里发送cookie,因此  setcookie()函数必须在其它信息被输出到浏览器前调用,这和对header()函数的限制类似。

  可以用 setcookie()或 setrawcookie()函数来设置 cookie。也可以通过向客户端直接发送http头来设置。要删除cookie,只需把有效时间设为小于当前时间,和把值设置为空即可。

  使用方法?通过php内置超级全局变量$_COOKIE 就可以读取浏览器端的cookie。

  session 使用过期时间设为0 的cookie,并且将一个称为session ID 的唯一标识符(一长串字符串),在服务器端同步生成一些 session 文件(可以自己定义 session 的保存类型),与用户机关联起来。web应用程序存贮与这些 session 相关的数据,并且让数据随着用户在页面之间传递.访问网站的来客会被分配一个唯一的标识符,即所谓的 SESSION ID。它要么存放在客户端的cookie,要么经由 URL 传递.SESSION 允许用户注册任意数目的变量并保留给各个请求使用。当来客访问网站时,PHP会自动(如果session.auto_start 被设为1)或在用户请求时(由session_start()明确调用或session_register() 暗中调用)检查请求中是否发送了特定的SESSION ID。如果是,则之前保存的环境就被重建。
  session最最核心的概念就是:网页间跳转的额外数据,保存在服务器,用一个id标识,浏览器要维持session,需要每次提交都带上这个id.

  使用方法?通过$_SESSION这个变量进行设置和获取。

  session是何时被删除的?通过一种垃圾回收机制进行清理删除。session.gc_maxlifetime 指定过了多少秒之后数据就会被视为"垃圾"并被清除。 垃圾搜集可能会在 session 启动的时候开始( 取决于 session.gc_probability 和 session.gc_divisor)。 session.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_probability 默认为1,session.gc_divisor 默认为 100。

  末语:本文内容来源主要为网络,通过一定的筛选,加上一定的个人理解而来,只为更方便查看,不过我相信对于考试或者面试一类的任务,本文还是有一定的存在意义的,不信你试试!

  最后,我将本文精简为一句话:cookie和session都是为了保存用户的状态而存在的,他在被访问时被通过一定的安全机制算法生成,又通过浏览器或某语言的一些特定进程(可以认为是守护进程)定期清理,session涉及内存及多服务器问题,可以将其保存到数据库或其他地方解决该问题!

  ok...

cookiesession的QA故事[原理篇]相关推荐

  1. Kubernetes应用部署模型解析(原理篇)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes应用部署模型解析(原理篇) 博客分类: Kubernetes [编者按]Kubernetes可用来管理Li ...

  2. 哲理故事300篇 上

    //哲理故事300篇(中):http://blog.csdn.net/andylin02/archive/2007/05/13/1606633.aspx //哲理故事300篇(下):http://bl ...

  3. 哲理故事300篇(上)

    //哲理故事300篇(中):http://blog.csdn.net/andylin02/archive/2007/05/13/1606633.aspx //哲理故事300篇(下):http://bl ...

  4. Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM

    原 Python3<机器学习实战>学习笔记(八):支持向量机原理篇之手撕线性SVM 置顶 2017年09月23日 17:50:18 阅读数:12644 转载请注明作者和出处: https: ...

  5. 管理计算机中木桶原理,2014国考面试备考:管理学原理的应用-木桶原理篇

    2014国考面试备考:管理学原理的应用-木桶原理篇由国家公务员考试网整理发布.更多关于2014国考面试备考,管理学原理的应用,木桶原理篇,以及公务员考试备考信息.请关注国家公务员考试网/内蒙古人事考试 ...

  6. 一文读懂BERT(原理篇)

    一文读懂BERT(原理篇) 2018年的10月11日,Google发布的论文<Pre-training of Deep Bidirectional Transformers for Langua ...

  7. 微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)

    1.点评 对于IM系统来说,如何做到IM聊天消息离线差异拉取(差异拉取是为了节省流量).消息多端同步.消息顺序保证等,是典型的IM技术难点. 就像即时通讯网整理的以下IM开发干货系列一样: <I ...

  8. 《CDN 之我见》系列二:原理篇(缓存、安全)

    2019独角兽企业重金招聘Python工程师标准>>> <CDN之我见>共由三个篇章组成,分为原理篇.详解篇和陨坑篇.本篇章适合那些从未接触过.或仅了解一些 CDN 专业 ...

  9. 检查压缩包是否损坏_修复损坏的gzip压缩文件之原理篇

    接修复损坏的gzip压缩文件之原理篇,再次引用GZIP结构图: 已知修复一个损坏的gzip文件的关键环节在于找到下一个正常压缩包的起始点.根据结构图中的信息可知,每个压缩包的开始结构中有是否到达尾部标 ...

最新文章

  1. pycharm导入本地py文件时,模块下方出现红色波浪线时如何解决
  2. yarn资源管理调度平台
  3. android真机调式问题之offline target
  4. Android之解析GML并显示
  5. C语言逻辑运算符详解
  6. Python+OpenCV:图像平滑
  7. Thread多线程用法示例
  8. myeclipse 创建 maven项目的时候出现:invalid project description 解决方法
  9. CV经典入门教程:《计算机视觉:算法与应用》第二版
  10. 3D游戏编程——游戏的本质
  11. Linux命令全称及目录结果
  12. 注册小程序需要营业执照吗?
  13. .NET新手系列(九)
  14. Blurry 高斯模糊库的使用
  15. 【机房收费个人版】SqlHelper
  16. 研发效能系列----开源的数据库版本管理工具Flyway
  17. 新的天花?高通量如何加速抗猴痘病毒化合物筛选 | MedChemExpress
  18. 百度地图 行政区域高亮显示
  19. iOS仿微信添加标签
  20. lua管理linux,Linux 安装 luarocks(lua的模块管理工具)

热门文章

  1. 计算机网络Rip例题,计算机网络技术习题
  2. mysql数据库备份方案_MySQL平台数据库备份方案详细说明
  3. python加载图片的方法_python从网络读取图片并直接进行处理的方法
  4. 【javaweb】eclipse重启后tomcat打不开解决方法
  5. centos7给MySQL配置环境变量
  6. mysql 表空间收缩_mysql表碎片清理和表空间收缩
  7. UIImage存为本地文件与UIImage转换为NSData
  8. 微信小程序让屏幕自动向下滚动
  9. 微信小程序发红包功能实现,附效果图加讲解。
  10. Go进阶:反射3定律