由 Session 和 Cookie 的区别说起

Session 和 Cookie 有什么区别?

最近面试被问到这个问题,和面试官一番讨论了解到面试官心里的答案后,我不太满意。

面对上面的问题,如果是刚毕业时的我,一定会毫不犹豫说出 Cookie 是存在客户端的,Session 存在服务器这个比较“标准”的答案。

现在么,我不打算探讨上面的问题,而是打算抓着 Session 说一说。

抽象层面,Session 的意义是会话。既然是会话,那就意味着每一次交流是有语境的,也就是有上下文的。

要做到这点,我们需要想办法保持(存储)会话的状态。

于是很自然的,我们想到下面的方案。

客户端持有一个门牌号,把会话信息存储在服务端,每次客户端都会带着钥匙发起请求,服务器通过门牌号,领客户端进入房间,就可以开始会话了。

那么客户端的门牌号存放在哪里呢?

在单页应用出现以前,所有数据都是通过服务器写进页面里,然后交给浏览器显示的,并且也没有 LocalStorage, SessionStorage 这样的存储空间供同一个域名下的前端页面们交流,于是这个门牌号就只能存放在 Cookie 里了。这大概就是 Session 和 Cookie 唯一的交集了。

如今,选择的余地大了很多。我们可以把门牌号放在 LocalStorage, SessionStorage 里,如果是单页应用的情况,还可以存放在内存里。

甚至,我们可以把整个会话用的房间也丢在客户端,如果不涉及机密事项的话。

所以 Session 只是一个抽象层面的技术概念,具体实现可以有很多种方案,使用 Cookie 只是其中一种,尽管最早设计出 Cookie 的原因或许正是这个。

以上。

本着讨论一定要出结果的原则,我还是给出开头抛出的问题的答案吧:

Session 跟 Cookie 的区别就像是 Java 跟 JavaScript,所以不要再提这个问题了。

posted on 2015-12-16 14:19  B1ncer  阅读(280)  评论(0编辑  收藏  举报

导航