Gin 学习之 cookie 读写

简介: Gin 学习之 cookie 读写

01

概念


HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。


Cookie 主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)


02

创建 cookie


Cookie 的生命周期可以通过两种方式定义:


  • 会话期 Cookie 是最简单的 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie 也会被保留下来,就好像浏览器从来没有关闭一样,这会导致 Cookie 的生命周期无限期延长。
  • 持久性 Cookie 的生命周期取决于过期时间(Expires)或有效期(Max-Age)指定的一段时间。


限制访问 Cookie:


有两种方法可以确保 Cookie 被安全发送,并且不会被意外的参与者或脚本访问:Secure 属性和 HttpOnly 属性。

标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端,因此可以预防 {{Glossary(“ MitM”,“ man-in-the -middle“)}} 攻击者的攻击。但即便设置了 Secure 标记,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其固有的不安全性,Secure 标记也无法提供确实的安全保障, 例如,可以访问客户端硬盘的人可以读取它。


Domain 和 Path 标识定义了Cookie的作用域:即允许 Cookie 应该发送给哪些URL。


Domain 属性


Domain 指定了哪些主机可以接受 Cookie。如果不指定,默认为 {{Glossary("origin")}},不包含子域名。如果指定了Domain,则一般包含子域名。因此,指定 Domain 比省略它的限制要少。但是,当子域需要共享有关用户的信息时,这可能会有所帮助。


Path 属性


Path 标识指定了主机下的哪些路径可以接受 Cookie(该 URL 路径必须存在于请求 URL 中)。以字符 %x2F ("/") 作为路径分隔符,子路径也会被匹配。



func (*gin.Context).SetCookie(name string, value string, maxAge int, path string, domain string, secure bool, httpOnly bool)


SetCookie 向响应头添加一个 Set-Cookie header。提供的 cookie 必须具有有效的名称,无效的 cookie 可能会被静默删除。



c.SetCookie("key", "lucy", 10, "/", "localhost", false, true)


03

读取 cookie



func (*gin.Context).Cookie(name string) (string, error)


Cookie 返回给定 cookie 名称的未转义的结果值,如果未找到则返回 ErrNoCookie,如果给定 cookie 名称存在多个,则只返回第一个 cookie 名称的结果值。



val, err := c.Cookie("key")


04

安全


信息被存在 Cookie 中时,需要明白 cookie 的值是可以被访问,且可以被终端用户所修改的。根据应用程序的不同,可能需要使用服务器查找的不透明标识符,或者研究诸如 JSON Web Tokens 之类的替代身份验证/机密机制。


当机器处于不安全环境时,切记不能通过 HTTP Cookie 存储、传输敏感信息。


缓解涉及Cookie的攻击的方法:


  • 使用 HttpOnly 属性可防止通过 JavaScript 访问 cookie 值。
  • 用于敏感信息(例如指示身份验证)的 Cookie 的生存期应较短。


完整代码:

640.png





目录
相关文章
|
3月前
|
存储 JavaScript 前端开发
学习vuex和localstorage . cookie的作用与区别
探讨Vuex、LocalStorage与Cookie:三种关键技术在现代Web开发中的角色。Vuex作为Vue的状态管理工具,提供集中、响应式且可预测的状态变更机制,适用于复杂应用。LocalStorage为客户端提供大容量、持久化的数据存储方案,适合保存用户偏好等静态信息。Cookie则擅长会话跟踪与认证管理,数据虽小却能在客户端与服务器间传递。每种技术针对不同场景各有优势,合理选用是关键。
|
6月前
|
存储 网络协议 测试技术
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— Cookie 处理
|
存储 缓存 负载均衡
我在学习Nginx的时候认识的cookie和session,有什么不同?
我在学习Nginx的时候认识的cookie和session,有什么不同?
129 0
|
存储 安全 前端开发
java学习之浅谈Cookie与Httpsession对象
java学习之浅谈Cookie与Httpsession对象
java学习之浅谈Cookie与Httpsession对象
|
存储 安全 数据安全/隐私保护
Flask学习与项目实战8:cookie与session的介绍与使用
cookie:在最开始的网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。c
Flask学习与项目实战8:cookie与session的介绍与使用
|
JSON JavaScript 数据格式
js-cookie读写浏览器中的Cookie
js-cookie读写浏览器中的Cookie
182 0
|
数据采集 Web App开发 存储
Python爬虫学习:Cookie 和 Session 的区别是什么?
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
191 0
express学习27-项目包含的知识点cookie和session2
express学习27-项目包含的知识点cookie和session2
107 0
express学习27-项目包含的知识点cookie和session2
express学习26-项目包含的知识点cookie和session
express学习26-项目包含的知识点cookie和session
52 0
express学习26-项目包含的知识点cookie和session
|
前端开发 JavaScript CDN
js-cookie读写浏览器中的Cookie及其应用
js-cookie读写浏览器中的Cookie及其应用
223 0