【Web】localStorage、sessionStorage、cookie 到底谁在“偷偷共享数据”?——一篇讲清 origin vs domain 的干货
如果你做过 H5、Vue3、Cordova WebView 或任何混合开发,基本都踩过一个经典疑惑:
“为什么我在 B 页面存的东西,A 页面能读到?有时候又读不到?”
看起来像“玄学”,其实本质就两个词:
- origin(同源)
- domain(同域)
这俩名字很像,但行为完全不是一回事。
1. 三兄弟先认清:谁管谁
浏览器里有三种常见存储:
| 存储 | 生命周期 | 共享规则 |
|---|---|---|
| sessionStorage | 会话级 | tab / WebView 实例隔离 |
| localStorage | 持久化 | 同 origin 共享 |
| cookie | 持久化 | 同 domain 共享 |
重点来了:
👉 localStorage 看 origin,cookie 看 domain
这就是一切混乱的源头。
2. 什么是 origin?(localStorage 的世界观)
origin 可以理解为:
“我是谁的精确身份证”
它由三部分组成:
origin = 协议 + 域名 + 端口
举个例子(很关键)
这些是不同 origin:
https://a.com
http://a.com
https://a.com:8080
https://sub.a.com
👉 全都不一样
localStorage 的规则很简单:
❗只要 origin 不一样 = 完全隔离
现实效果:
- A 页面写 localStorage
- B 页面必须 完全同 origin
- 否则:看不到,碰不到,想不到
3. 什么是 domain?(cookie 的世界观)
cookie 的逻辑就“宽松”很多:
“我属于哪个家族”
它只看域名,不看协议和端口。
默认 cookie 行为
如果你不设置 domain:
www.a.com
cookie 只能在:
www.a.com
使用
如果你设置:
Domain=.a.com
那就变成:
a.com
www.a.com
api.a.com
👉 子域全部共享
4. origin vs domain:本质差异(重点)
| 维度 | origin | domain |
|---|---|---|
| 是否包含协议 | ✔ | ❌ |
| 是否包含端口 | ✔ | ❌ |
| 是否支持子域共享 | ❌ | ✔ |
| 严格程度 | 极严格 | 相对宽松 |
一句话总结:
- origin = 精确定位(身份证)
- domain = 家族范围(族谱)
5. 三种存储行为一图理解
🧠 sessionStorage(最“孤独”)
每个 tab / WebView 都是独立宇宙
- A 页面 ❌ 看不到 B 页面
- 生命周期结束即消失
🧠 localStorage(最“固执”)
只认 origin,不认人
- 同 origin:共享
- 不同 origin:彻底隔离
🍪 cookie(最“社交”)
只要是同一个域名家族,都能聊天
- 子域共享
- 全局可见(在 domain 允许情况下)
6. 放到真实开发场景(Vue3 + Cordova)
你这个组合特别容易踩坑。
场景:
- A Activity → WebView A
- B Activity → WebView B
- 同一个域名
sessionStorage:
❌ 完全隔离(比 PC 更“硬隔离”)
localStorage:
✔ 共享(同 origin)
👉 Activity 不影响它
cookie:
✔ 全共享(CookieManager 级别)
7. 为什么你会觉得“PC 和手机不一样”?
因为你把这两件事混在一起了:
PC 浏览器:
- tab = sessionStorage 单位
- profile = localStorage / cookie
WebView:
- Activity = WebView 实例
- App = 存储容器
结果就是:
❗你以为换页面 = 换环境
❗实际上只有 sessionStorage 真换了
8. 最容易踩的 4 个坑(重点收藏)
坑 1:子域不共享 localStorage
a.com ❌ www.a.com
坑 2:HTTP vs HTTPS
http ❌ https
坑 3:端口不同直接隔离
localhost:3000 ❌ localhost:5173
坑 4:以为 WebView Activity 会隔离所有存储
👉 实际只有 sessionStorage 被隔离
9. 最终记忆口诀(建议背下来)
如果只记一句话:
localStorage 看 origin,cookie 看 domain,sessionStorage 看“窗口/实例”
10. 一张终极总结表
| 存储 | 共享规则 | 跨 WebView Activity |
|---|---|---|
| sessionStorage | tab / 实例隔离 | ❌ |
| localStorage | origin 共享 | ✔ |
| cookie | domain 共享 | ✔ |
11. 结尾(开发者真相)
浏览器从来不“随机共享数据”,只是规则太细:
- origin 是“精确坐标”
- domain 是“家族范围”
- sessionStorage 是“临时记忆”
- localStorage 是“长期记忆”
- cookie 是“跨系统通行证”
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)