深入了解cookie以及实际项目中的应用

文章介绍了Cookie的工作原理,作为HTTP无状态的解决方案,用于保持用户状态。讨论了Cookie的不可跨域性、主要属性如名称、值、过期时间等,并对比了Cookie与Session的区别。同时,提到了Cookie在Git中的应用,特别是SSH连接与HTTPS的区别,强调了安全性和性能因素。
摘要由CSDN通过智能技术生成

目录

cookie的原理

cookie是不可跨域的

cookie 的属性

Cookie与Session的区别

在git中的应用


cookie的原理

什么是cookie呢?

众所周知:http都是无状态的

但随着 Web 的不断发展,这种 无状态 的特性出现了弊端。当你登录到一家购物网站,在跳转到该站的其他页面时也应该继续保持登录状态。但是因为 HTTP 是无状态的,所以必须得在浏览器端存储一些信息来标识当前用户,因此 cookie 应运而生,它一种浏览器管理状态的文件。

 

浏览器第一次发出请求,服务器会将 cookie 放入到响应请求中,在浏览器第二次发请求的时候,会把 cookie 带过去,于是服务端就会辨别用户身份。注意:单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

cookie 在请求头中有一个 cookie 字段,在响应头里有一个 set-cookie 字段。

cookie是不可跨域的

每一个域名下都有自己的cookie,而且这些cookie是互通的,但是不同的域名之间的cookie是不能够通信的,比如www.baidu.com的cookie不能够访问csdn.net的cookie 这样做的目的是为了安全进行考虑

 

cookie 的属性

  1. Name(名称):指定cookie的名称。
    例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";中username就是名称。

  2. Value(值):设置cookie的值。
    例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";中username的值是johndoe。

  3. Expires(过期时间):设置cookie的过期时间,一旦过期该cookie就会被删除。
    例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";中设置了2023年1月1日过期。

  4. Domain(域名):指定cookie可用的域名。
    例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; domain=example.com;path=/";中指定了cookie只能使用在example.com下。

  5. Path(路径):指定cookie可用的路径。
    例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";中指定了cookie在整个网站内都可用。

  6. Secure(安全):标记cookie只有在使用HTTPS协议时才能被发送给服务器。
    例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; secure; path=/";中设置了在HTTPS协议下才能被使用。

  7. HttpOnly(仅限HTTP):防止脚本访问cookie,增强了cookie的安全性,防止XSS攻击。
    例如:Set-Cookie: id=a3fWa; Expires=Thu, 21 Sep 2023 07:28:00 GMT; HttpOnly; path=/;; 中设置了HttpOnly属性。

  8. SameSite:防范CSRF攻击。
    例如:Set-Cookie: id=a3fWa; Expires=Thu, 21 Sep 2023 07:28:00 GMT; SameSite=Lax; path=/;; 中设置了SameSite属性。

Cookie与Session的区别

  1. cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的;
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

在git中的应用

git中为什么使用ssh连接需要本地生成ssh密钥,然而https就不需要呢?

使用https协议进行克隆和推送时,需要提供用户名和密码,这些信息会明文传输到GitHub服务器上进行身份验证。而这些信息就是通过用户登录时生成的cookie进行获取的。

因此,https协议需要保证数据传输的安全性,所以需要使用TLS/SSL进行加密,从而保证数据的机密性和完整性。但是,由于加密和解密操作所需的计算量和带宽开销较大,所以https协议有可能会导致性能下降。

而使用ssh协议,则需要在本地机器上生成公钥和私钥,并将公钥上传到GitHub服务器上进行身份验证。与https协议不同的是,ssh协议不需要在每次传输数据时进行身份验证,因此不需要在每次数据交互时都进行加密和解密操作。这种方式可以提高数据传输的效率和安全性。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADRU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值