目录
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 的属性
-
Name
(名称):指定cookie的名称。
例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";
中username就是名称。 -
Value
(值):设置cookie的值。
例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";
中username的值是johndoe。 -
Expires
(过期时间):设置cookie的过期时间,一旦过期该cookie就会被删除。
例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";
中设置了2023年1月1日过期。 -
Domain
(域名):指定cookie可用的域名。
例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; domain=example.com;path=/";
中指定了cookie只能使用在example.com下。 -
Path
(路径):指定cookie可用的路径。
例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/";
中指定了cookie在整个网站内都可用。 -
Secure
(安全):标记cookie只有在使用HTTPS协议时才能被发送给服务器。
例如:document.cookie="username=johndoe; expires=Sun, 1 Jan 2023 00:00:00 UTC; secure; path=/";
中设置了在HTTPS协议下才能被使用。 -
HttpOnly
(仅限HTTP):防止脚本访问cookie,增强了cookie的安全性,防止XSS攻击。
例如:Set-Cookie: id=a3fWa; Expires=Thu, 21 Sep 2023 07:28:00 GMT; HttpOnly; path=/;
; 中设置了HttpOnly属性。 -
SameSite
:防范CSRF攻击。
例如:Set-Cookie: id=a3fWa; Expires=Thu, 21 Sep 2023 07:28:00 GMT; SameSite=Lax; path=/;
; 中设置了SameSite属性。
Cookie与Session的区别
- cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的;
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;
在git中的应用
git中为什么使用ssh连接需要本地生成ssh密钥,然而https就不需要呢?
使用https协议进行克隆和推送时,需要提供用户名和密码,这些信息会明文传输到GitHub服务器上进行身份验证。而这些信息就是通过用户登录时生成的cookie进行获取的。
因此,https协议需要保证数据传输的安全性,所以需要使用TLS/SSL进行加密,从而保证数据的机密性和完整性。但是,由于加密和解密操作所需的计算量和带宽开销较大,所以https协议有可能会导致性能下降。
而使用ssh协议,则需要在本地机器上生成公钥和私钥,并将公钥上传到GitHub服务器上进行身份验证。与https协议不同的是,ssh协议不需要在每次传输数据时进行身份验证,因此不需要在每次数据交互时都进行加密和解密操作。这种方式可以提高数据传输的效率和安全性。