HTTP cookie与session

telnet命令

telnet 是一个网络协议,用于通过 TCP/IP 网络进行远程登录到服务器。它允许用户在本地计算机上通过网络连接到远程服务器,并在服务器上执行命令

telnet [主机名或IP地址] [端口号]//连接服务器
  • telnet 会话中,Ctrl+] 会将你从当前会话切换到 telnet 的命令模式,你可以在这里输入命令。Ctrl+T 可以显示当前的连接状态。

HTTP是无连接,无状态的,就是每次访问一个服务器,都要发送请求,接收请求响应,而cookie和session是两种常用的客户端与服务端之间保持状态的技术

cookie

定义

HTTP Cookie是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发送请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等.

工作原理

  1. 当用户第一次访问网站时,服务器会在响应的 HTTP 头中设置 Set-Cookie字段,用于发送 Cookie 到用户的浏览器。

  2. 浏览器在接收到 Cookie 后,会将其保存在本地(通常是按照域名进行存储)

  3. 在之后的请求中,浏览器会自动在 HTTP 请求头中携带 Cookie 字段,将之前保存的 Cookie 信息发送给服务器。

HTTP cookie与session_第1张图片

分类

  • 会话 Cookie(Session Cookie):在浏览器关闭时失效。

  • 持久 Cookie(Persistent Cookie):带有明确的过期日期或持续时间,可以跨多个浏览器会话存在。

  • 如果 cookie 是一个持久性的 cookie,那么它其实就是浏览器相关的,特定目录下的一个文件。

cookie的基本格式

  • HTTP存在一个报头选项:Set-Cookie,可以用来进行给浏览器设置Cookie值。

  • 在HTTP响应头中添加,客户端获取并自行设置并保存Cookie

Set-Cookie:=
//其中是Cookie的名称,是Cookie的值
    
//完整的Set-Cookie示例
Set-Cookie: username=peter; expires=Thu, 18 Dec 2024 12:00:00 UTC; path=/; domain=.example.com; secure; HttpOnly
属性 描述
username peter 这是 Cookie 的名称和值,标识用户
expires Thu, 18 Dec 2024 12:00:00 UTC 指定Cookie的过期时间
path /a/b 定义Cookie的作用范围
domain .example.com 指定哪些域名可以接收这个Cookie
secure 指示 Cookie 只能通过 HTTPS 协议发送增加安全性。
HttpOnly 阻止客户端脚本访问,防止脚本攻击

时间格式必须遵守RFC1123标准,具体格式样例:Tue, 01 Jan 2030 12:34:56 GMT 或者 UTC(推荐)。

CMT和UTC的区别

GMT(格林尼治平均时间)和UTC(协调世界时)是两种时间标准,它们在大多数情况下是等同的,但它们的定义和用途有所不同:

  1. 定义

  • GMT:格林尼治平均时间(Greenwich Mean Time)是一种时间标准,基于地球的自转,以英国伦敦郊区的格林尼治天文台为基准。GMT是本地时间,不考虑夏令时(Daylight Saving Time, DST)的影响。

  • UTC:协调世界时(Coordinated Universal Time)是一种时间标准,基于原子时(国际原子时,TAI)和地球自转时间的结合。UTC通过在原子时中添加或减去闰秒来保持与地球自转时间的一致性。

  1. 用途

  • GMT:最初用于航海和天文观测,现在主要用于定义其他时区相对于格林尼治的标准时间。

  • UTC:作为全球统一的时间标准,广泛用于国际时间同步、全球定位系统(GPS)、互联网和航空等领域。

  1. 夏令时

  • GMT:不涉及夏令时的调整,全年保持不变。

  • UTC:也不涉及夏令时的调整,全年保持不变。

  1. 历史和变迁

  • 在1960年代之前,GMT和UTC是相同的。但随着原子时的引入,UTC被定义为更精确的时间标准,以适应现代科技的需求。从那时起,UTC成为了全球时间同步的标准,而GMT则更多地被用作地理和历史参考。

  1. 实际应用

  • 在大多数情况下,GMT和UTC是等效的,因为它们的时间差通常不超过0.9秒。但在理论上,由于地球自转速度的不均匀性,GMT和UTC之间可能会有微小的差异。

  1. 闰秒

  • UTC:为了保持UTC与地球自转同步,会在必要的时候添加闰秒。这是UTC与GMT的主要区别之一,因为GMT不考虑闰秒。

  • GMT:不添加闰秒,完全基于地球自转。

总结来说,GMT和UTC在实际应用中几乎相同,但UTC是更精确的时间标准,考虑了闰秒的调整,而GMT则更多地用于地理和历史参考。

注意事项

  • 每个Cookie属性之间用分号 " ; " 连接和空格 " " 分割。

  • 名称和值之间使用等号 = 分隔

  • 如果 Cookie 的名称或值包含特殊字符(如空格、分号、逗号等),则需要进行 URL 编码。

单独使用Cookie有什么问题?

本质问题是这些私密数据在浏览器端保存,非常容易被人盗取,私密数据容易泄露

HTTP Session

HTTP Session是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于HTTP协议是无状态的(每个请求都是独立的),因此服务器需要通过Session来记住用户的信息。

工作原理

当用户首次访问网站时,服务器会为用户创建一个唯一的Session ID,并通过Cookie将其发送到客户端,客户端会在之后的请求中携带这个Session ID,服务器通过Session ID 来识别用户,从而获取用户的会话信息。服务器通常会把Session ID 信息储存在内存,数据库或缓存中。

HTTP cookie与session_第2张图片

安全性

与 Cookie 相似,由于 Session ID 是在客户端和服务器之间传递的,因此也存在被窃取的风险。但是一般虽然 Cookie 被盗取了,但是用户只泄漏了一个 Session ID,私密信息暂时没有被泄露的风险。Session ID 便于服务端进行客户端有效性的管理,比如异地登录,可以通过 HTTPS 和设置合适的 Cookie 属性(如 HttpOnly 和 Secure)来增强安全性。

超时和失效

Session 可以设置超时时间,当超过这个时间后,Session 会自动失效。服务器也可以主动使 Session 失效,例如当用户登出时

总结

HTTP Cookie 和Session 都是用于在Web应用中跟踪用户状态的机制。Cookie是存储在客户端的,Session是储存在服务器端的

你可能感兴趣的:(计算机网络,http,网络协议,网络)