app端的cookie怎么提取
HTTP协议中的Cookie和Session
HTTP协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录。为了弥补HTTP的无状态特性,我们引入了Cookie和Session。
一、什么是Session
当客户端向服务端发送请求时,服务端会为此请求开辟一块内存空间,这块空间被称为Session对象,其存储结构通常为ConcurrentHashMap。Session弥补了HTTP无状态特性,服务器可以利用Session存储客户端在同一个会话期间的一些操作记录。
二、如何判断是否为同一会话
服务器第一次接收到请求时,会开辟一块Session空间(创建Session对象),同时生成一个sessionId,并通过响应头的Set-Cookie:JSESSIONID=XXXXXXX命令,向客户端发送要求设置Cookie的响应。客户端收到响应后,会在本机客户端设置JSESSIONID=XXXXXXX的Cookie信息,该Cookie的过期时间通常为浏览器会话结束。接下来,客户端每次向同一网站发送请求时,都会在请求头带上该Cookie信息(包含sessionId),服务器通过读取请求头中的Cookie信息,获取名称为JSESSIONID的值,得到此次请求的sessionId。
三、Session的缺点
Session机制的一个缺点是,当使用负载均衡后,如果A服务器存储了Session,但是当流量转移到B服务器时,B服务器并没有存储A的Session,这会导致Session失效。
四、什么是Cookies
HTTP协议中的Cookie包括Web Cookie和浏览器Cookie,它是服务器发送到Web浏览器的一小块数据。服务器发送到浏览器的Cookie,浏览器会进行存储,并在下一个请求时一起发送到服务器。通常,它用于判断两个请求是否来自同一浏览器,例如用户保持登录状态。
五、HTTP Cookie机制的作用
HTTP Cookie机制是HTTP协议无状态的一种补充和改良。Cookie主要用于以下三个目的:
1. 会话管理。
2. 登陆、购物车、游戏得分或服务器应该记住的其他内容。
3. 个性化,如用户偏好、主题或其他设置。
4. 追踪,记录和分析用户行为。
六、创建Cookie
当接收到客户端发出的HTTP请求时,服务器可以发送带有响应的Set-Cookie头来创建Cookie。浏览器通常会存储这些Cookie,并将它们与HTTP头一同发送回服务器。
七、JSON Web Token(JWT)与Session Cookies的对比
JWT和Session Cookies都可以用于网站的用户身份验证,但它们有一些不同点:
1. 密码签名:JWT具有加密签名,而Session Cookies没有。
2. 无状态性:JWT是无状态的,因为声明被存储在客户端而不是服务端内存中。这使得身份验证可以在本地进行,无需与数据库通信。而Session Cookies存储在服务器内存中,处理大量请求时可能会消耗大量资源。因此JWT具有更强的可扩展性。
3. 跨域认证:JWT支持跨域认证,而Session Cookies通常只能在单个节点的域或其子域中有效。
对于只需要登录用户并访问存储在站点数据库中的一些信息的中小型网站来说,Session Cookies通常就能满足需求。但如果你需要处理大量请求,尤其是第三方或跨域API,那么JWT可能更适合。