首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 初步介绍微信小程序
02 | 还有哪些其它公司的小程序产品
03 | 小程序的特点及开发能力
04 | 新的一年,微信小程序开放了哪些新功能?
05 | 小程序运行机制简介:从零构建一个Web App需要做哪些事情?
06 | 开发环境配置:创建你的第一个小程序项目
07 | icon组件:关于图标的4个实现方案
08 | progress组件:如何自定义实现一个环形进度条?
09 | rich-text组件:如何单击预览rich-text中的图片并保存?
10 | view容器组件及Flex布局(一):学习容器组件view及其重要属性
11 | view容器组件及Flex布局(二):介绍flex布局中常用的样式及样式值
12 | 可移动容器及可移动区域(一):学习使用movable-view与movable-area组件
13 | 可移动容器及可移动区域(二):如何实现侧滑删除功能
14 | scroll-view介绍:在小程序中如何实现滚动锚定?
15 | scroll-view介绍:如果渲染一个滚动的长列表?
16 | 滚动选择器(一):学习使用选择器组件
17 | 滚动选择器(二):使用两种方式自定义实现省、市、区三级联动的选择器
18 | 滑动选择器表单组件:如何基于wxs自定义一个竖向的slider?
19 | 页面链接组件:如何自定义一个导航栏?
20 | image媒体组件(上):如何实现图片的懒加载?
21 | image媒体组件(下):开发中经常遇到的问题?
22 | 如何实现直播间功能?(一):了解live-pusher、live-player组件的主要属性及使用限制
23 | 如何实现直播间功能?(二):如何开启、使用腾讯云的云直播功能
24 | 如何实现直播间功能?(三):安装与使用ffmepg,及使用ffmpeg进行推拉流验证
25 | 如何实现直播间功能?(四):使用live-pusher、live-player组件在小程序中实现直播功能
26 | 如何实现直播间功能?(五):同层渲染
27 | 如何实现直播间功能?(六):live-pusher、live-player组件在开发中的常见问题
28 | web-view(一):了解session、cookie等相关基本概念
29 | web-view(二):了解常见的四种鉴权方式
30 | web-view(三):如何使用koa框架,及如何进行热加载?
31 | web-view(四):如何在服务器端实现cookie与sesson的生成?
32 | web-view(五):如何将session存储到服务器端,及如何实现token验证?
33 | web-view(六):基于koa中间件,实现微信一键登录的后端接口
34 | web-view(七):实现微信用户一键登录
35 | web-view(八):了解正确的微信登录姿势
36 | web-view(九):web-view组件在开发的常见问题讲解
37 | WebGL介绍(一):了解WebGL相关的基础概念
38 | WebGL介绍(二):如何在小程序中取到WebGL上下文环境对象
39 | WebGL介绍(三):了解WebGL的世界坐标系
40 | WebGL介绍(四):重新认识右手坐标系及如何编写顶点着色器代码
41 | WebGL介绍(五):学习片断着色器编写,了解变量修饰变型uniform与attribute
42 | WebGL介绍(六):了解在WebGL中裁剪空间是如何裁剪出来的
43 | WebGL介绍(七):了解着色器变量值的绑定及三种三角形绘制模式之间的差异
44 | WebGL介绍(八):在着色器中使用共享变量,绘制一个颜色渐变的正方形
45 | WebGL介绍(九):完成动画
46 | WebGL介绍(十):绘制一个旋转的立方体
47 | WebGL介绍(十一):在3D绘制中使用纹理材质
48 | WebGL介绍(十二):如何创建相机、场景及光源
49 | WebGL介绍(十三):创建加载器、渲染器与控制器,完成3D模型文件的加载与展示
50 | 网络接口简介(一):如何使用wx.request接口
51 | 网络接口简介(二):将登录代码模块化封装
52 | 网络接口简介(三):Promise介绍及 6 个常用方法
53 | 网络接口简介(四):Promise三个方法any、all与race的使用介绍
54 | 网络接口简介(五):基于Promise+await、async关键字改写登录模块
55 | 网络接口简介(六):关于Page页面隐藏代码执行及Promise对象的catch处理的补充
56 | 网络接口简介(七):学习EventChannel对象
57 | 网络接口简介(八):观察者模式介绍及Event模块实现
58 | 网络接口简介(九):扩展wxp模块的request3方法,实现用户登录的自动融合
59 | tabBar组件(一):系统默认的tabBar组件如何开启及使用
60 | tabBar组件(二):基于系统提供的自定义方式,实现一个tabBar组件
61 | tabBar组件(三):通过自定义组件扩展的方式,给任意组件添加通用方法
62 | 开放接口(一):如何对Page进行全局扩展
63 | 开放接口(二):优化前后端登录代码,解决后端解密错误
当前位置:
首页>>
技术小册>>
微信小程序全栈开发实战(上)
小册名称:微信小程序全栈开发实战(上)
### 章节 28 | web-view(一):了解session、cookie等相关基本概念 在微信小程序的全栈开发旅程中,`web-view` 组件扮演着举足轻重的角色,它允许开发者在小程序内嵌入网页内容,实现小程序与Web技术的无缝融合。然而,在利用 `web-view` 加载外部网页时,不可避免地会遇到Web开发中常见的会话管理问题,特别是关于 `session` 和 `cookie` 的理解和应用。本章将深入探讨这两个基本概念,以及它们在小程序 `web-view` 场景下的应用与注意事项。 #### 一、引言 在Web开发中,`session` 和 `cookie` 是处理用户会话(即用户与服务器之间的一系列交互)的两种核心机制。它们虽然功能相似,但在实现方式、存储位置、安全性及用途上存在显著差异。了解这些差异对于优化微信小程序中 `web-view` 的使用体验至关重要。 #### 二、Cookie基础 ##### 2.1 Cookie的定义 Cookie,也被称为“小甜饼”,是存储在用户本地终端上的一小段文本数据。它由服务器创建,发送给浏览器,并在浏览器下次向同一服务器发起请求时携带回去。Cookie主要用于识别用户身份、跟踪会话状态、存储用户偏好设置等。 ##### 2.2 Cookie的工作原理 1. **创建与发送**:当用户首次访问网站时,服务器会在HTTP响应头中包含一个 `Set-Cookie` 字段,该字段指示浏览器存储一段数据(即Cookie)。 2. **存储**:浏览器会在用户的本地设备上创建一个Cookie文件,并保存这段数据。 3. **携带与验证**:随后的每次请求中,浏览器都会自动在HTTP请求头中包含一个 `Cookie` 字段,将之前存储的Cookie发送给服务器。服务器通过验证这个Cookie来识别用户身份或会话状态。 ##### 2.3 Cookie的属性 - **Name**:Cookie的名称。 - **Value**:Cookie的值。 - **Domain**:Cookie所属的域名。 - **Path**:Cookie有效的服务器路径。 - **Expires/Max-Age**:Cookie的过期时间。 - **Secure**:仅当HTTPS连接时,Cookie才会被发送。 - **HttpOnly**:无法通过客户端脚本访问(如JavaScript),增加安全性。 #### 三、Session基础 ##### 3.1 Session的定义 与Cookie不同,Session是一种服务器端技术,用于在服务器上存储用户会话信息。Session通过在服务器上为每个用户创建一个唯一的会话标识符(Session ID)来实现,这个ID被发送到客户端(通常是浏览器的Cookie中),以便服务器能够识别用户的后续请求。 ##### 3.2 Session的工作原理 1. **生成Session ID**:当用户首次访问服务器时,服务器会为该用户生成一个唯一的Session ID。 2. **发送Session ID**:服务器将这个Session ID通过HTTP响应的Set-Cookie字段发送给客户端,客户端(浏览器)将其保存在Cookie中。 3. **验证Session ID**:客户端在随后的每次请求中,都会通过Cookie将Session ID发送给服务器。服务器通过验证这个Session ID来恢复用户的会话状态。 4. **管理Session**:服务器负责维护所有活跃的会话,并根据需要存储或删除Session数据。 ##### 3.3 Session与Cookie的关系 虽然Session和Cookie在功能上有相似之处,但它们的本质区别在于存储位置和数据管理方式。Session数据存储在服务器上,而Cookie数据则存储在客户端。Session ID通常通过Cookie传递给客户端,但这并不是必须的,也可以通过URL重写等其他方式传递。 #### 四、`web-view`中的session与cookie处理 在微信小程序中使用 `web-view` 加载外部网页时,关于session和cookie的处理需要特别注意: - **Cookie传递**:默认情况下,`web-view` 不会携带小程序自身的Cookie到嵌入的网页中。如果网页需要识别来自小程序的请求,一种常见的做法是通过 `web-view` 的 `src` 属性或自定义的URL参数传递必要的身份信息或Session ID。 - **Session管理**:由于Session数据存储在服务器上,`web-view` 加载的网页需要确保能够正确接收并验证来自小程序的Session ID。这通常涉及到服务器端的Session管理机制与小程序间的协同工作。 - **安全性考虑**:在使用 `web-view` 加载外部网页时,应特别注意数据传输的安全性,特别是当涉及到敏感信息(如用户凭证、Session ID等)时。建议使用HTTPS协议来加密传输的数据,并避免在URL中直接暴露敏感信息。 - **跨域问题**:如果小程序和嵌入的网页分属不同的域名,还可能遇到跨域资源共享(CORS)的问题。这要求服务器配置正确的CORS策略,以允许来自小程序域名的请求。 #### 五、最佳实践与注意事项 - **最小化Cookie使用**:尽量减少Cookie的使用,特别是避免在Cookie中存储敏感信息。 - **使用HTTPS**:确保所有通过 `web-view` 加载的网页都使用HTTPS协议,以保护数据传输的安全性。 - **自定义URL参数**:考虑使用自定义的URL参数来传递必要的身份信息或会话状态,而非依赖Cookie。 - **服务器端验证**:服务器端应对所有来自 `web-view` 的请求进行严格验证,确保请求的有效性和安全性。 - **跨域处理**:合理配置CORS策略,确保跨域请求能够顺利进行。 #### 六、总结 在微信小程序的全栈开发过程中,`web-view` 组件的使用为小程序与Web技术的融合提供了可能。然而,在利用 `web-view` 加载外部网页时,必须深刻理解并妥善处理session和cookie等会话管理机制。通过合理设计数据传递方案、加强数据传输的安全性以及妥善配置服务器端的验证和跨域策略,我们可以有效提升小程序中 `web-view` 的使用体验和数据安全性。
上一篇:
27 | 如何实现直播间功能?(六):live-pusher、live-player组件在开发中的常见问题
下一篇:
29 | web-view(二):了解常见的四种鉴权方式
该分类下的相关小册推荐:
微信小程序全栈开发实战(下)
微信小程序与云开发(中)
微信小程序与云开发(上)
微信小程序与云开发(下)
微信小程序底层框架实现原理
微信小程序全栈开发实战(中)