微信小程序与h5无法共享浏览器session,需通过统一token鉴权、unionid映射及安全跳转凭证实现登录态一致:后端签发jwt,前端存储并携带authorization头;以unionid为用户唯一标识;跨端跳转使用加密ticket而非明文token;推荐内存缓存+短时效refresh机制保障安全与体验。

微信小程序和H5页面本质上运行在不同环境(小程序有独立的沙盒,H5走浏览器),它们无法共享 sessionStorage、localStorage 或 Cookie 中的 session 数据。所谓“Session 同步”,实际是通过统一后端鉴权机制 + 前端 Token 传递来实现用户状态的一致性,而非真正同步浏览器的 Session。
统一登录态:用 token 替代传统 Session
微信小程序和 H5 都应放弃依赖服务端 Session(如 Express 的 session 中间件),改用 JWT 或自定义 token 作为登录凭证:
- 用户在小程序或 H5 登录后,后端生成一个包含用户 ID、过期时间等信息的 token,并返回给前端
- 前端将 token 存入本地(小程序用 wx.setStorageSync,H5 用 localStorage 或内存变量),后续所有请求带上 Authorization: Bearer xxx
- 后端统一校验 token 合法性与有效性,不依赖 req.session
小程序与 H5 共享登录态的关键:UnionID + OpenID 映射
微信生态下,同一微信用户在小程序和公众号/H5(需绑定同一公众号)中可获取 UnionID。这是打通两端身份的核心:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 小程序调用 wx.login 获取 code,传给后端换取 openid + unionid(需公众号已绑定)
- H5 页面通过 JS-SDK 的 wx.login(需配置公众号授权域名)或静默授权获取 code,同样换取 openid + unionid
- 后端以 unionid 为唯一标识关联用户,避免小程序 openid 和 H5 openid 不同导致账号分裂
跨端跳转时传递 token 或临时凭证
当从 H5 跳转到小程序(或反之),需安全传递登录凭证:
- H5 跳小程序:用
wx.miniProgram.navigateTo或 URL Scheme,将加密后的 token 或短时效 ticket 作为 query 参数传入(避免明文 token) - 小程序跳 H5:通过
web-view组件加载 H5 页面时,在 src URL 中携带加密参数(如 sign=xxx×tamp=xxx),H5 加载后用该参数向后端换 token - 敏感 token 不建议直接拼在 URL 中,推荐用后端签发的临时票据(ticket),有效期 5–10 分钟,一次有效
注意存储安全与自动续期
token 管理直接影响体验与安全:
- 小程序中避免把 token 存在 data 或页面变量里,优先用 wx.setStorageSync + 内存缓存双保险
- H5 中不推荐长期存 token 在 localStorage(XSS 风险),可用 httpOnly Cookie(但小程序无法读取),所以更推荐内存存储 + 登录态心跳刷新
- 前后端约定 token 过期前 5 分钟发起 refresh 接口,延长有效期,减少用户频繁重登
不复杂但容易忽略的是:前后端必须共用一套 token 签发/校验逻辑,且所有接口统一拦截鉴权。只要 UnionID 对得上、token 校验一致、跳转凭证可控,小程序和 H5 就能呈现“无缝登录”的效果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










