[session篇]看源码学习session(一)

假如你是使用过或学习过PHP,你一定觉得很简单。session只不过是$_SESSION就可以搞得,这还不简单只是对一个key-value就能工作了。我觉得可以大多数的phper都是这样的,这是语言本身就赋予的。还学习个毛啊,我只要知道它是存数据,并且是服务端的就可以了。

 
我们noder则要坎坷一些,noder大部分自来于Front-end。session比较少会使用,如果我们也只是求个使用。也可以看看API就足够了,何必勉强自己。
 
凡事都应该从简单的入手,我们先来讲讲使用方法。自express4来,session从框架分离出来,所以它的名字现在叫express-session。(如果只是单纯做一个session,只不过是一个记录sessionID的对象)
 
app.use(session({secret: 'helloworld'}));
 
然后还要加上body-parser,这时phper又不懂了。这还要自己加呀,真是没用。没错,node的设计就是模块化,加上这个才能解析json和请求体。有了这些东西,就可以当一个普通对象使用了,像这样:
 
app.get('/',function(req,res){

       var session=req.session;
       session.user = { id:1, name:"hello"}
})
 
更多方法可以到它的github主页上了解,好了。我们可以来看看这个session的源码,打开https://github.com/expressjs/session/blob/master/index.js。看了一下依赖,前面几个都是cookie相关,有一个叫crc的东西。这是一个完整性的验证算法,后面有时间再去学习。依赖的前半部分都是cookie相关,后面才是真正的session部分。
 
var cookie = require('cookie');  // 一个cookie的序列和反序列库
var crc = require('crc').crc32;  // 完整验证算法
var debug = require('debug')('express-session'); // debug这个插件
var deprecate = require('depd')('express-session'); // 未知
var parseUrl = require('parseurl'); // 转化url
var uid = require('uid-safe').sync // 得到一个uid
  , onHeaders = require('on-headers') // 写heasers的
  , signature = require('cookie-signature') // cookie签名
/*---------------------Session----------------------*/
var Session = require('./session/session')
  , MemoryStore = require('./session/memory')
  , Cookie = require('./session/cookie')
  , Store = require('./session/store')

 


 
看来我们先研究cookie是对的,session是依赖它的。在session这一部分,有4个文件。从名字上来看,分3个功能。一个是把session存内存,一个是跟cookie相关,一个是把session存数据库。下面我们来验证吧,come on。
posted @ 2015-01-14 09:21  e.e.p  阅读(1040)  评论(0编辑  收藏  举报