App 开发者应该知道的 cookie 和 session

现在的移动端的 App 已经基本被 Android 和 iOS 两者瓜分天下,我们知道: Android 应用目前使用 Android/Kotlin 开发,iOS 应用使用 Object-C / Swift 开发。它们的共同点都是调用手机原生组件,这样的方式能充分利用手机原有性能。无论从界面美观性方面,还是从使用流畅性方面,相比 React-Native 方式开发的应用都有很大的优势。它们的发展又同时在 PC 端之后,为了方便地对 PC 端页面进行兼容,都具有特定的组件用来加载网页: Andriod 中使用 WebView, iOS 中使用 UIWebView/WKWebView。所以作为移动端的开发者,对传统网页的前端请求/后台响应的实现流程,需要有基本了解。

我们知道一个完整的请求流程包括请求/响应两个过程:

《App 开发者应该知道的 cookie 和 session》 请求/响应

第一步 PC 端发送请求,通过请求行、请求头和请求体来发送详细的请求;第二步服务器收到对请求进行处理,根据请求的具体内容来响应。在这样的 PC 端和服务端对话中,服务器想要管理会话,需要解决以下两个问题:

1 如何标识不同的 PC ?
2 如何标识服务端的不同请求?

问题 1 是为了识别客户端。假如为会话的客户端定义了 ID 身份标识,那么服务器就能对该客户端进行个性化服务。这就像一个人去一家新的理发厅理发,那么理发厅开始时只能按照对待新人的既定流程提供服务:比如 “极力的推荐办卡”、“询问你喜欢哪种发型” 等。但是如果你成为了该理发店的 VIP ,拥有了会员卡 (有了身份标识),那么该理发店就能根据对你的服务记录来提供服务,比如推荐你喜欢的发型、询问你对上次理发的感受等。

实际网络请求中解决的方式和上面的流程很相似,通过 cookie 来作为标识客户端的 ID 。第一次网络请求会话过程中,服务器端定义标识客户端的 cookie ,返回给客户端并存放在客户端的缓存中。客户端再次发送请求时,会把自身的 cookie 传递给服务器,被服务器识别后就能定制化提供响应。比如我们浏览论坛时常常看到的上一次浏览时间、还有在购物网站看到的历史浏览记录等,都是基于 cookie 来实现。下面是通过 google 开发者工具在访问简书时生成的 cookie :

《App 开发者应该知道的 cookie 和 session》 cookie

cookie 具有以下特点:
1 具有有效期, 就像理发卡里面的余额,过期就失效了;
2 同一个请求也可以设置多个 cookie ,类似一个人可以在一家理发店办理
多个 VIP,来享受不同的服务类型;
3 同一个 PC 端可以有不同的 cookie,来对应不同的服务器;

问题 2 中服务端通过 session 来实现区别不同的网络请求。就像一个人去理发店后,店长(服务器)安排一个理发师(网络请求)来为他服务。所以 session 和 cookie 一一对应,二者都是有服务端创建、定义。不同的是 session 存放在服务端,而 cookie 由服务端创建后存储在客户端,使用 session 同样能达到 cookie 实现的效果。存放在
服务端的 session 能够避免信息存储在客户端后被用户手动清除的问题,但是从另一方面来说,也增加了服务端的存储压力。

综上,cookie / session 是一个网络请求中相互对应的标识符。cookie 用在客户端,session 存储在服务端。利用 cookie / session 服务端能实现对一个网络请求的定制响应。

可以利用 IDEA 来模拟一个 PC 端网页请求/响应的流程。需要以下环境:

1 Tomcat 服务器;
2 以 Java Servlet 作为后台服务程序;
3 IntelliJ IDEA 作为 IDE ;

如果不知道如何用 IntelliJ IDEA 配置 Tomcat 和 Java Servlet ,请参考我的上篇文章:基于 IntelliJ IDEA 模拟 Servlet 网络请求

喜欢和关注都是对我的鼓励和支持~
    原文作者:uniapp
    原文地址: https://www.jianshu.com/p/93593396260b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞