使用加密 cookie 代替 session 的应用方案

  在传统的网站应用中,我们会把一些相对敏感的用户信息保存在 session 中,目的就是为了避免这些敏感信息的意外泄漏,给用户带来不便。但要实现这个功能,我们却要付出比较昂贵的代价。比如单服务器的小型网站,session 占用文件系统或数据库资源,当然因为网站小,用户数量并不多,这个不会带来多大的问题。但如果对一个大型网站,过数万个用户同时在线的话,这个成本就非常大了,并且为了解决多服务器共享 session 的问题,还可能会使用数据库来保存 session 的数据,数万个在线用户的 session 可不是随便搞个数据库就可以抗起来的。

  其实在我们真实的互联网应用中,这部分的数据是否真的很敏感?这个值得大家思考。为了避免使用 session 所要花费的成本,我们可以考虑使用加密的 cookie 来代替。下面介绍一下我做的 cookie 共享方案:

 使用加密cookie代替session的应用

  从图中可以看到,我们为加密 cookie 专门提供了一个 XTea Server(Xtea是一个加密协议),其实它就是一个加密和解密字符串的服务程序,采用 TCP Socket 进行连接。

  因为网站会涉及到多种开发语言和多种应用,比如 PHP/Java 和 Flash 等常用的。为了实现大家的 cookie 共享,我们就需要专门提供这样一个 XTea Server 了。这样无论是什么语言或应用,只要它能够使用 Socket 连接,就可以很方便的共享cookie,比如 Flash 就有 XMLSocket,Flash 也可以很方便的读取浏览器上的 cookie。并且加密和解密都在我们的服务器后台,cookie 可被解密的可能性就降低了。

  当然实现 cookie 的加密共享只是重要的一环,另外我们还需要给 cookie 的数据定制一个数据结构标准,这里我建议大家使用 JSON 数据格式进行共享,因为 JSON 是可以方便的给 JavaScript 语言解析读取,并且现在流行的开发应用都支持 JSON 数据格式。(其实 XML 更广,但它的数据格式实现起来比较长,并不适合我们使用到 cookie 上)

  就是这样我们就已经实现了cookie 加密数据在多种应用中共享使用了。比如用户在网站上登录了,再进入我们的 Flash 应用,Flash 应用就可以直接把用户浏览器上的 cookie 发送到 XTea Server上解密,解读出用户信息了 :)