热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Cookies与Session的区别及使用(记录)

HTTP是一种无状态的协议,不知道链接是谁发起的,所以需要浏览器把登录信息存起来,Ses

HTTP是一种无状态的协议,不知道链接是谁发起的,所以需要浏览器把登录信息存起来,Session和COOKIE就是为解决这个问题而提出来的两个机制。


1.COOKIE是服务器在本地机器上存储的小段文本,并随每一个请求发送至同一服务器,是在客户端保持状态的方案。有时也用COOKIEs,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密。一般应用最典型的案列就是判断注册用户是否已经登过该网站。COOKIE的主要内容包括:名字,值,过期时间,路径和域。

  • 过期时间如不设,则浏览器关掉就消失,存储在内存当中;否则就按设置的时间来存储在硬盘上的,过期后自动清除。

  • 路径和域就是对应的域名,a网站的COOKIE自然不能给b用。

2.Session存储在服务端,每建立一个连接就会生成一个Session ID,并将其通过响应发送到浏览器。浏览器把Session ID存在COOKIE中,浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到对应的存放用户数据的类HashTable结构。

  • 当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。

  • 一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。

COOKIE与Session的区别


存储数据量方面:Session 能够存储任意的 java 对象,COOKIE 只能存储 String 类型的对象

COOKIE 在客户端,Session在服务端。因COOKIE在客户端所以可以编辑伪造,不是十分安全。

Session过多时会消耗服务器资源,大型网站会有专门Session服务器,COOKIE存在客户端没问题。

域的支持范围不一样,比方说a.com的COOKIE在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

3.LocalStorage 和SessionStorage:两者都是仅在客户端(即浏览器)中保存,不参与和服务器的通信;


localStorage - 没有时间限制的数据存储


sessionStorage - 针对一个 session 的数据存储,当用户关闭浏览器窗口后,数据会被删除。

COOKIE 与SessionStorage 、LocalStorage 的区别(共同点:都是保存在浏览器端,且同源的。)


COOKIE数据始终在同源的http请求中携带(即使不需要),即COOKIE在浏览器和服务器间来回传递;COOKIE数据还有路径(path)的概念,可以限制COOKIE只属于某个路径下。存储大小限制也不同,COOKIE数据不能超过4k,同时因为每次http请求都会携带COOKIE,所以COOKIE只适合保存很小的数据,如会话标识。而SessionStorage和LocalStorage不会自动把数据发给服务器,仅在本地保存。SessionStorage和LocalStorage 虽然也有存储大小的限制,但比COOKIE大得多,可以达到5M或更大。

数据有效期不同,SessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;COOKIE只在设置的COOKIE过期时间之前一直有效,即使窗口或浏览器关闭。

作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;COOKIE也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。


二.Web Storage 事件通知机制

Web Storage API内建了一套事件通知机制,当存储区域的内容发生改变(包括增加、修改、删除数据)时,就会自动触发 storage 事件,并把它发送给所有感兴趣的监听者。因此,如果需要跟踪存储区域的改变,就需要在关心存储区域内容的页面监听 storage 事件。


所有支持 localStorage 的浏览器都支持 storage 事件,包括 IE8。


但IE 8不支持 W3C 标准的 addEventListener。因此,为了监听 storage 事件,还需要检测浏览器支持哪种事件机制:


if (window.addEventListener) {

    window.addEventListener("storage", handleStorage, false);

} else {

    window.attachEvent("onstorage", handleStorage);

}

handleStorage 回调函数接受一个 StorageEvent 参数,在IE中,StorageEvent对象保存在 window.event 里面。


function handleStorage(e) {

  if (!e) {

    e = window.event;

  }

}

此时,变量 e 就是一个 StorageEvent 对象,这个对象有很多有用的属性。这些属性及含义请移步参考文章:https://blog.csdn.net/ixygj197875/article/details/80114096或者百度一下。







推荐阅读
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
author-avatar
夜-依晨_920
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有