【发布时间】:2019-11-17 07:36:51
【问题描述】:
我对 cookie 有点困惑,我想知道我们能否在浏览器以外的其他地方使用 cookie,例如移动应用程序或桌面应用程序。 cookie是否依赖于浏览器?
【问题讨论】:
标签: http web cookies https state-management
我对 cookie 有点困惑,我想知道我们能否在浏览器以外的其他地方使用 cookie,例如移动应用程序或桌面应用程序。 cookie是否依赖于浏览器?
【问题讨论】:
标签: http web cookies https state-management
任何 HTTP 客户端都可以使用 cookie。 cookie 只是服务器发送的 HTTP 标头,其值由客户端在后续请求中发送回服务器。请查阅您的 HTTP 客户端的文档,看看是否有内置的记忆 cookie 支持。
【讨论】:
基于会话的身份验证
在基于会话的身份验证中,服务器将在用户登录后为用户创建一个会话。会话 ID 然后存储在用户浏览器的 cookie 中。当用户保持登录状态时,cookie 将与每个后续请求一起发送。然后服务器可以将cookie中存储的会话ID与内存中存储的会话信息进行比较,以验证用户的身份并发送具有相应状态的响应!
基于令牌的身份验证
许多 Web 应用程序使用 JSON Web Token (JWT) 而不是会话进行身份验证。在基于令牌的应用程序中,服务器使用秘密创建 JWT 并将 JWT 发送到客户端。客户端存储 JWT(通常在本地存储中)并在每个请求的标头中包含 JWT。然后,服务器将使用来自客户端的每个请求验证 JWT 并发送响应。
这里最大的区别是用户的状态不存储在服务器上,而是存储在客户端的令牌中。出于可扩展性和移动设备身份验证等原因,大多数现代 Web 应用程序都使用 JWT 进行身份验证。
可扩展性
基于会话的身份验证:由于会话存储在服务器的内存中,当有大量用户同时使用系统时,扩展成为一个问题。
基于令牌的身份验证: 扩展没有问题,因为令牌存储在客户端。
多设备
基于会话的身份验证: Cookie 通常在单个域或子域上工作,如果它们在跨域工作(第三方 Cookie),它们通常会被浏览器禁用。当 API 从不同的域提供给移动和网络设备时,它会带来问题。
基于令牌的身份验证:cookie 没有问题,因为 JWT 包含在请求标头中。
基于令牌的身份验证:使用 JWT 是现代 Web 应用程序中更推荐的方法。 JWT 的一个缺点是 JWT 的大小与存储在 cookie 中的会话 id 相比要大得多,因为 JWT 包含更多的用户信息。必须注意确保 JWT 中只包含必要的信息,并且应省略敏感信息以防止 XSS 安全攻击。
【讨论】: