什么是cookie?

什么是cookie?

Cookie 定义

“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。

Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。

为什么要使用Cookie?

首先我们要知道一个概念,web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

另一方面,在服务器不需要先前信息时它的应答就较快。

举个例子:比如你去跟老师请一天假,老师问了你一遍原因,准你请假。请假结束后你发现一天好像不够,然后你又去跟老师请假。老师又问了你一遍原因。

如果你是客户端,那么老师就是服务器端。你请假结束后,客户端和服务器端连接关闭,你要再次请假的话,客户端课服务器端需要重新连接,但是因为HTTP协议是无状态协议,服务器已经不知道你为什么来了,所以又问了你一次。而Cookie的产生弥补HTTP协议的不足。

Cookie什么时候产生?

Cookie的使用一先要看需求。因为浏览器可以禁用Cookie,同时服务端也可以不Set-Cookie。

一般来说,访问html不产生cookie,访问jsp,servlet产生cookie。客户端向服务器端发送一个请求的时,服务端向客户端发送一个cookie 然后浏览器将Cookie保存。

cookie有两种保存方式,一种是浏览器会将cookie保存在内存中,还有一种是保存在客户端的硬盘中,之后每次http请求浏览器都会将cookie发送给服务器端。

具体流程如下:
客户端提交一个HTTP请求给服务端
服务端这个时候做了两件事,一个是Set-Cookie,还有一个是提交响应内容给客户端 客户端再次向服务器请求时会在请求头中携带一个Cookie
服务端提交响应内容给客户端

举例:分登录之前和登录后,登录前服务端给浏览器一个Cookie,但是这个Cookie里面没有用户信息,但是登录成功之后,服务端给浏览器一个Cookie,这个时候的Cookie已经记录了用户的信息,在系统内任意访问,可以实现免登录。

Cookie的生存周期?

Cookie在生成时就会被指定一个maxAge值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。

有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。可以总结一下:

a、如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。

b、如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。

c、如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除:

Cookie有哪些缺陷?

a、数量受到限制。一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的 Cookie 总数不能超过 20 个

b、安全性无法得到保障。通常跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能。

在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有 Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。

c、浏览器可以禁用Cookie,禁用Cookie后,也就无法享有Cookie带来的方便。

原文链接 https://www.cnblogs.com/liulinghua90/p/7682400.html

  • 16
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cookie是Web开发中一种小的文本文件,它存储在用户的浏览器上,通常由服务器发送给客户端,用于记录和跟踪用户的会话信息。这些信息可以帮助网站识别和个性化用户体验,比如记住用户的登录状态、购物车内容等。 创建一个简单的Cookie步骤如下: 1. **使用HTTP响应头设置Cookie**: 当服务器响应客户端的请求时,可以包含一个Set-Cookie头,例如: ```javascript // JavaScript (Node.js示例) response.setHeader('Set-Cookie', `username=${encodeURIComponent(username)}`); ``` 这里,`username`是要存储的键值对,`encodeURIComponent`确保值被正确编码以适应URL。 2. **JavaScript操作Cookie**: 如果是在客户端(如浏览器)使用JavaScript,可以读取和写入Cookie: ```javascript // JavaScript 示例 function setCookie(name, value, days) { var expires = ''; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = '; expires=' + date.toUTCString(); } document.cookie = name + '=' + (value || '') + expires + '; path=/'; } // 读取Cookie function getCookie(name) { var nameEQ = name + '='; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } ``` 3. **注意安全性**: Cookie虽然方便,但也存在安全风险,比如跨站脚本攻击(XSS)和隐私泄露。因此,在实际应用中,应考虑使用HTTPS加密传输,并限制Cookie的内容和过期时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值