cookie 是否依赖于浏览器?
Is the cookie dependent on the browser?
我对 cookie 有点困惑,我想知道我们能否在浏览器以外的地方使用 cookie,例如移动应用程序或桌面应用程序。 cookie 是否依赖于浏览器?
任何 HTTP 客户端都可以使用 cookie。 cookie 只是服务器发送的 HTTP header,其值由客户端在后续请求中发送回服务器。请查阅您的 HTTP 客户端的文档,看看是否 built-in 支持记住 cookie。
不,cookie 不依赖于浏览器。
Cookie 依赖于 HTTP "User-Agent" -- software/library 客户端代表用户执行 HTTP 协议。浏览器只是其中的一种。其他类型的"User-Agent"包括:
- 可以发送HTTP请求的CLI软件,例如curl or wget.
- 可以在项目中导入并发送HTTP请求的库。以Node.js项目为例,可以是request or axios。所有主要编程语言都有自己的 HTTP 客户端库。
- Self-implemented HTTP客户端逻辑代码。
- 更多...
在移动应用程序或桌面应用程序中,如果应用程序使用HTTP,则很有可能使用cookie。
Session 基于身份验证
在基于session的身份验证中,服务器会在用户登录后为用户创建一个session。然后将session id存储在用户的cookie中浏览器。当用户保持登录状态时,cookie 将与每个后续请求一起发送。然后服务器可以将存储在 cookie 中的 session id 与存储在内存中的 session 信息进行比较,以验证用户身份并发送相应状态的响应!
基于令牌的身份验证
许多网络应用程序使用 JSON 网络令牌 (JWT) 而不是 sessions 进行身份验证。在基于令牌的应用程序中,服务器使用秘密创建 JWT 并将 JWT 发送给客户端。客户端存储 JWT(通常在本地存储中)并在每个请求的 header 中包含 JWT。然后,服务器将使用来自客户端的每个请求验证 JWT 并发送响应。
这里最大的区别是用户的状态不存储在服务器上,而是存储在客户端的令牌中。出于可扩展性和移动设备身份验证等原因,大多数现代 Web 应用程序都使用 JWT 进行身份验证。
可扩展性
基于 Session 的身份验证: 因为 sessions 存储在服务器的内存中,所以当有大量用户时,扩展成为一个问题立即使用系统。
基于令牌的身份验证:缩放没有问题,因为令牌存储在客户端。
多个设备
Session 基于身份验证: Cookie 通常在单个域或子域上工作,如果它们工作,它们通常会被浏览器禁用 cross-domain(第 3 方饼干)。当 API 从不同的域提供给移动和 Web 设备时,它会带来问题。
基于令牌的身份验证:cookie 没有问题,因为请求中包含 JWT header。
基于令牌的身份验证:使用 JWT 是现代网络应用中更推荐的方法。 JWT 的一个缺点是 JWT 的大小与存储在 cookie 中的 session id 相比要大得多,因为 JWT 包含更多的用户信息。必须注意确保仅在 JWT 中包含必要的信息,并应省略敏感信息以防止 XSS 安全攻击。
我对 cookie 有点困惑,我想知道我们能否在浏览器以外的地方使用 cookie,例如移动应用程序或桌面应用程序。 cookie 是否依赖于浏览器?
任何 HTTP 客户端都可以使用 cookie。 cookie 只是服务器发送的 HTTP header,其值由客户端在后续请求中发送回服务器。请查阅您的 HTTP 客户端的文档,看看是否 built-in 支持记住 cookie。
不,cookie 不依赖于浏览器。
Cookie 依赖于 HTTP "User-Agent" -- software/library 客户端代表用户执行 HTTP 协议。浏览器只是其中的一种。其他类型的"User-Agent"包括:
- 可以发送HTTP请求的CLI软件,例如curl or wget.
- 可以在项目中导入并发送HTTP请求的库。以Node.js项目为例,可以是request or axios。所有主要编程语言都有自己的 HTTP 客户端库。
- Self-implemented HTTP客户端逻辑代码。
- 更多...
在移动应用程序或桌面应用程序中,如果应用程序使用HTTP,则很有可能使用cookie。
Session 基于身份验证
在基于session的身份验证中,服务器会在用户登录后为用户创建一个session。然后将session id存储在用户的cookie中浏览器。当用户保持登录状态时,cookie 将与每个后续请求一起发送。然后服务器可以将存储在 cookie 中的 session id 与存储在内存中的 session 信息进行比较,以验证用户身份并发送相应状态的响应!
基于令牌的身份验证
许多网络应用程序使用 JSON 网络令牌 (JWT) 而不是 sessions 进行身份验证。在基于令牌的应用程序中,服务器使用秘密创建 JWT 并将 JWT 发送给客户端。客户端存储 JWT(通常在本地存储中)并在每个请求的 header 中包含 JWT。然后,服务器将使用来自客户端的每个请求验证 JWT 并发送响应。
这里最大的区别是用户的状态不存储在服务器上,而是存储在客户端的令牌中。出于可扩展性和移动设备身份验证等原因,大多数现代 Web 应用程序都使用 JWT 进行身份验证。
可扩展性
基于Session 的身份验证: 因为 sessions 存储在服务器的内存中,所以当有大量用户时,扩展成为一个问题立即使用系统。
基于令牌的身份验证:缩放没有问题,因为令牌存储在客户端。
多个设备
Session 基于身份验证: Cookie 通常在单个域或子域上工作,如果它们工作,它们通常会被浏览器禁用 cross-domain(第 3 方饼干)。当 API 从不同的域提供给移动和 Web 设备时,它会带来问题。
基于令牌的身份验证:cookie 没有问题,因为请求中包含 JWT header。
基于令牌的身份验证:使用 JWT 是现代网络应用中更推荐的方法。 JWT 的一个缺点是 JWT 的大小与存储在 cookie 中的 session id 相比要大得多,因为 JWT 包含更多的用户信息。必须注意确保仅在 JWT 中包含必要的信息,并应省略敏感信息以防止 XSS 安全攻击。