前端cookie解读 您所在的位置:网站首页 cookie解读 前端cookie解读

前端cookie解读

2023-07-08 02:37| 来源: 网络整理| 查看: 265

Cookie

补充:当关闭浏览器或关机后重新打开,存放在硬盘上的数据不会消失,而存放在内存中的数据会消失。

Cookie的引入

当用户在未登录状态下在京东购物网站向购物车中添加某些商品后将浏览器关闭,然后再打开浏览器访问京东,此时查看购物车会发现,购物车中仍然有刚才添加的商品,这其实就是cookie的功劳。

Cookie是一段不超过4KB的小型文本数据,由一个名称name,一个值value和其他几个控制Cookie有效期,安全性,使用范围的可选属性组成。

name/value:设置Cookie的名称及相应的值,对于认证的Cookie,value值包括Web服务器所提供的访问令牌。 expires属性:设置Cookie的生命周期。有两种存储类型的Cookie:会话性和持久性。Expires属性缺省时,为会话性Cookie,仅保留在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期或用户直接在网页中单击注销等按钮结束会话时才会失效。 path属性:定义了Web站点上可以访问该Cookie的目录。 Domain属性:指定了可以访问该Cookie的Web站点或域。Cookie机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的Cookie。当需要实现单点登陆方案时,Cookie的上述特性非常有用,然而也增加了Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因而,浏览器禁止在Domain属性上设置.org、.com等顶级域名,以及在国家级及地区顶级域下注册的二级域名,以减少攻击的范围。 Secure属性:指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。但是基于兼容性的原因(比如有些网站使用自签署的证书)在检测到SSL证书无效时,浏览器并不会立即终止用户的连接请求,而是显示安全风险信息,用户仍可以选择继续访问该站点。由于许多用户缺乏安全意识,因而仍可能连接到Pharming攻击所伪造的网站。 HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头 Cookie的简介

cookie是属于web开发的技术,由若干键值对构成,且键值对均为字符串。它是所有web开发语言据支持的技术。它是一种进行网络会话状态跟踪的技术。

会话(当用户打开浏览器,从发出第一次请求开始,一直到最终关闭浏览器就表示一次会话的完成)则是由一组请求和响应组成,是围绕看一件相关事情所进行的请求和响应,所以这些请求和响应之间必须有数据传递,即进行会话状态跟踪。但http协议是一种无状态协议,在不同请求间无法进行数据传递。此时就需要一种可以进行请求间数据传递的会话跟踪技术,而cookie就是这样一种技术。

Cookie是由服务器生成,保存在客户端的一种信息载体。这个载体中存放着用户访问该站点的会话状态信息。只要cookie没有被清空,或cookie没有生效,那么保存在其中的会话状态就有效。用户在提交第一次请求后,由服务器生成cookie并将其封装到响应头中,以响应的形式发送给客户端,客户端接收到这个响应后,将cookie保存到客户端。当客户端再发起同类的请求(资源路径路径相同)后,在请求中会携带保存在客户端的cookie数据,发送给服务器,由服务器对会话进行跟踪。

注意:cookie禁用仅是客户端不接收来自客户端的cookie,后端服务器还是有响应cookie回来的。一般不会禁用cookie,否则就不能使用,会出现500错误。

cookie是什么

简单讲,cookie就是浏览器存储在用户电脑上的一小段文本文件。cookie是纯文本格式,不包含任何可执行的代码。一个web页面或者服务器告知浏览器按照一定规则来存储这些信息,并在随后的请求中将这些信息发送至服务器,web服务器就可以使用这些信息来识别不同的用户。大多数需要登陆的网站在用户验证之后都会设置一个cookie,只要这个cookie存在并可使用,用户就可以自由浏览这个网站的任意页面。再次说明,cookie只包含数据,就其本身而言并不有害。

设置Cookie的失效时间:

如果Cookie没有设置expires属性,那么 cookie 的生命周期只是在当前的会话中,

关闭浏览器意味着这次会话的结束,此时 cookie 随之失效。

1、当设置的失效时间大于等于1天时,我们可以在 expires 属性后面直接输入XX天数

123456Cookies.set('name', 'value', { expires: 7,});// => 'value'Cookies.get('name');Cookies.remove('name');

2、当设置的失效时间少于一天时:我们需要在当前的时间上加上失效时间。

例如下面是设置cookie的失效时间为15分钟。

1234567var millisecond = new Date().getTime();var expiresTime = new Date(millisecond + 60 * 1000 * 15);Cookies.set('name', 'value', { expires: expiresTime,});

PS:如果expires设置一个过去的时间点,那么这个cookie 会被立即删掉(失效)。

Session

session即会话,是web开发中的一种会话状态跟踪技术,跟cookie类似,不过cookie是将会话状态存放于客户端的,而session是存在于服务端的。

服务端生成session

在服务器中系统会为每个会话维护一个session。不同的会话,对应不同的session。服务器对当前应用中的session是以Map的形式进行管理的,这个Map称为Session列表,该map的key为一个32位长度的随机串,这个随机串称为JSession,value则为session对象的引用。当用户第一次提交请求时,服务端servlet中执行到request.getSession()后会自动生成一个Map.Entry对象,key为一个根据某种算法新生成的JSessionID,value则为新创建的HttpSession对象。

服务器生成并发送cookie

在将Session信息写入session列表后,系统还会自动将JSESSIONID作为name,这个32位长度的随机串作为value,以cookie的形式存放到响应头中,并随着响应将该cookie发送到客户端。

客户端接收并发送cookie

客户端接受到这个cookie后会将其存放到浏览器的缓存中。即只要客户端浏览器不关闭,浏览器缓存的cookie就不会消失。

当用户提交第二次请求时,会将缓存中的这个cookie伴随着请求的头部信息一块发到服务端。

congsession列表中查找

服务端从请求中读取到从客户端发来的cookie,并根据cookie的JSESSIONID的值,从Map中查找相应key所对应的value,即session对象。然后对该session对象的域属性进行读写操作。

session的失效

web开发中引入的session超时的概念,session的失效就是指session的超时。若某个session在指定的时间范围内一直未被访问,那session将超时,即将失效。

服务器针对不同的会话找到不同的session,是因为cookie完成了会话的跟踪。但是,若客户端浏览器将cookie禁用,则服务器每提交一次请求,服务器在给出的响应中都会包含名称为JSESSIONID的cookie,只不过这个cookie值每次都不同,也就是说客户端所提交的请求中没有包含JSESSIONID,服务器就会认为这是一次新的会话的开始,就会为其生成一个Map.Entry对象,所以也就无法实现会话跟踪了。

安全威胁

https://baike.baidu.com/item/cookie/1119#reference-[3]-5062332-wrap



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有