浅谈Cookie

Cookie是一小段文本信息,伴随着用户请求和页面在web服务器和浏览器之间进行传递。用户每次访问站点时,web应用程序都可以读取Cookie里包含的信息。假设在用户请求访问 您的网站上的某个页面时,您的应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 Cookie。用户的浏览器在获得页面的同时还得到了这个 Cookie。

谷歌浏览器不支持本地cookie缓存,只支持服务器cookie缓存。火狐ie浏览器既支持本地cookie缓存,也支持服务器cookie缓存。

cookie在性质上是绑定在特定域名下的。当设置了一个cookie之后,再给创建它的域名发送请求时都会包含这个cookie,这个限制保证了存储在cookie中的信息只能被批准的接受者访问,而无法被其他域访问。

由于cookie本地缓存在客户端计算机上,还加入了一些限制确保cookie不会被恶意使用,同时不会占据太多的磁盘空间。每个域的cookie总数是有限制的,不过浏览器之间各有不同。

  • IE6以及更低版本限制每个域名最多20个cookie。
  • IE7以及之后的版本每个域名最多50个。
  • Firefox限制每个域最多50个cookie.
  • Opera限制每个域最多30个cookie.
  • Safari和Chrome对于每个域的cookie数量限制没有硬性规定。

浏览器对于cookie的尺寸也有限制。大多数浏览器都有大约4096B(加减1)的长度限制。为了最佳的浏览器兼容性,最好将整个cookie长度限制在4095B以内。尺寸限制影响到一个域下所有的cookie,而并非每个cookie单独限制。

完整的cookie结构:cookie由一堆固定的键/值对组成 name=value;[expires=date];[path=path][domain=somewhere.com];[secure];其中name=value都是自定义的,是必须有的。后续的其他键值对按需求进行参加,而且一条cookie只能存一条信息。

document.cookie="username=litongxue";
document.cookie="password=12345";

需要注意的是cookie取值时将键值对同时取出。如果从浏览器加载页面,那么当前cookie缓存分栏的名字是由主机的名字命名,如果是本地加载文件,缓存分栏是没有名字的。

expires过期时间,值是一个日期对象,如果当前时间刚好是该日期对象的时间或者是过去的时间,那么cookie过期,清除过期的cookie。如果该键不设置,默认是当前回话结束时消失(在关闭浏览器后,cookie缓存就会自动清除。

//获取n天后某一天的日期对象;
  function getDate(n){
  var oDate=new Date();
  var num=oDate.getDate();
  oDate.setDate(num+n);
  return oDate;
}

path 限制访问路径,如果不设置path这个属性,如果本地加载的文件,路径是文件在磁盘上的存储路径,如果是服务器加载的文件,路径是文件在服务器上的文件路径。我们可以设置路径,但是必须保证设置路径以后,文件存储的实际路径,必须和存储cookie的路径一致,否则访问cookie失败。

document.cookie = "username=lifei;expires=" + getDate(2) + ";path=/Users/tianyufei/Desktop/%E9%9D%92%E5%B2%9B1602%E7%8F%AD/13cookie/code/";

alert(document.cookie);

domain 限制访问域名,如果不设置,默认是加载当前文件的服务器的主机名,如果设置的域名,和加载当前文件的域名不一致的,cookie缓存失败。

document.cookie = "username=lifei;expires=" + getDate(2) + ";domain=lifei.localXX";

secure 加密链接访问,如果不设置的话,当前cookie默认任意类型的连接都可以进行访问,如果设置了,当前cookie 仅限加密连接 可以进行访问。

document.cookie = "username=tianyufei;expires=" + getDate(2) + ";secure";

cookie缓存时候,我们可以将中文部分进行转码,转成对应的字符编码,再进行存储。这时候会用到encodeURIComponent(str)进行编码,编码后进行存储。读取的时候要相应的

用到decodeURIComponent(str)进行解码。

encodeURIComponent(str) //编码
decodeURIComponent(str)//解码
//str为需要编码解码的字符串;

以下是我简单封装的设置cookie、读取cookie以及删除cookie的几个方法;

设置cookie

function setCookie(name, value, expires, path, domain, isSecure){
            //声明空字符串,用户cookie的拼接
            var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
            if(expires){
                cookieText += ";expires=" + expires;
            }
            if(path){
                cookieText += ";path=" + path;
            }
            if(domain){
                cookieText += ";domain=" + domain;
            }
            if(isSecure){
                cookieText += ";secure";
            }
            //设置当前cookie
            document.cookie = cookieText;
        }

读取cookie;

 function getCookie (name) {
        var cookieText=decodeURIComponent(document.cookie);
        var start=cookieText.indexOf(name);
        if (start == -1) {
            return;
        }else{
         var end=cookieText.indexOf(";",start);
         if (end == -1) {
          end=cookieText.length;
         }
        }
      var  subStr=cookieText.substring(start,end);
      var arr=subStr.split("=");
      return arr[1];
     }

删除cookie的原理就是设置cookie的时候设置相同的cookie名称然后过期的时间,这样cookie就会被覆盖并删除。

        function removeCookie(name){
            //一个name只能存储一条cookie,如果重复存储,后一条就会将前一条覆盖掉
            //给一个过期时间
        setCookie(name, "", new Date(0));
        }

最后提醒一下,一定不要在cookie中存储重要的和敏感的数据。cookie数据并非存储在一个安全的环境中,其中包含的任何数据都可以被他人访问。哈哈,今天的分享就到这里,

希望大家喜欢。

时间: 2024-10-10 16:37:44

浅谈Cookie的相关文章

浅谈 Cookie 与 Session 的区别

1.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范.网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求附上这些cookies . 具体来说cookie机制采用的是在客户端保持会话状态的方案.它是在用户端的会话状态的存贮机制,他需要用户

浅谈cookie,sessionStorage和localStorage区别

在客户端存储数据可以使用的技术有如下四种: Cookie技术:浏览器兼容性好,但操作比较复杂,需要程序员自己封装,源生的Cookie接口不友好 H5 WebStorage:不能超过8MB,操作简单: IndexedDB:可存大量数据,还不是标准技术: Flash存储:依赖于Flash播放器,Adobe已宣布将放弃Flash,可以不再考虑此技术. 这里主要讨论cookie和WebStorage: 共同之处:Cookie和WebStorage都是用来跟踪浏览器用户身份的会话方式. 名词解释:Sess

(进阶篇)浅谈COOKIE和SESSION关系和区别

COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 1.设置Cookie PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int exp

浅谈cookie测试

Cookie 提供了一种在Web 应用程序中存储用户特定信息的方法,例如存储用户的上次 访问时间等信息.假如不进行cookie存储一个网站的用户行为,那么可能会造成以下问题:用户进行购买几件商品转到结算页面时,系统怎样知道用户之前订了哪几件商品.因为,cookie其中一个作用就是记录用户操作系统的日志,而系统对cookie不单单是存储,还有读取,也就是说系统和用户之前是一个交互的过程,这称为有状态. 但是Cookie 在带来这些编程的方便性的同时,也带来了安全上的问题.Cookie 的安全性问题

浅谈asp.net通过本机cookie仿百度(google)实现搜索input框自动弹出搜索提示

对于通过用户输入关键词实现自动弹出相关搜索结果,这里本人给两种解决方案,用于两种不同的情形. 常见方法是在数据库里建一个用户搜索关系表,然后通过用户搜索框输入的关键字异步调用数据表中的相关数据,显示在一个隐藏div中. 第二种方式也就是我现在着重讨论的方式,适用于单个用户,基于此用户以往的搜索数据来实现搜索提示功能.技术关键是记录下用户的以往搜索数据,写入cookie,然后页面从用户本机cookie调用数据. ok,下面进入正题.本文主要讲实现步骤,代码可根据自己实际需要更改. 一,如何写入co

【转】浅谈Nginx负载均衡与F5的区别

前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问本地门户,动态数据则通过反向代理指向内网服务. 其实Nginx和F5这两者均可用作网站负载均衡,那二者有什么区别呢?笔者在此浅谈下Nginx与F5的一些区别. 目前很多网站或应用在设计之初都会为高并发的数据请求做负载均衡,不差钱的土豪用户一般会直接买F5硬件设备作为其负载均衡器,原因不用多

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳

浅谈移动前端的最佳实践(转)

前言 这几天,第三轮全站优化结束,测试项目在2G首屏载入速度取得了一些优化成绩,对比下来有10s左右的差距: 这次优化工作结束后,已经是第三次大规模折腾公司框架了,这里将一些自己知道的移动端的建议提出来分享下,希望对各位有用 文中有误请您提出,以免误人自误 技术选型 单页or多页 spa(single page application)也就是我们常常说的web应用程序webapp,被认为是业内的发展趋势,主要有两个优点: ① 用户体验好 ② 可以更好的降低服务器压力 但是单页有几个致命的缺点:

【开源】浅谈Hybrid技术的设计与实现第二弹

前言 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) PS:据说加个开源在前面阅读量高点,于是就试试咯...... 上文说了很多关于Hybrid的概要设计,可以算得上大而全,有说明有demo有代码,对于想接触Hybrid的朋友来说应该有一定帮助,但是对于进阶的朋友可能就不太满足了,他们会想了解其中的每一个细节,甚至是一些Native的实现,小钗这里继续抛砖引玉,希望接下来的内容对各位有一定帮助. 进入今天的内容之前我们首先谈谈两个相关技术Ionic与React Nativ