假如你是使用过或学习过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。

[session篇]看源码学习session(一)的更多相关文章

  1. JDK源码学习系列03----StringBuffer+StringBuilder

                         JDK源码学习系列03----StringBuffer+StringBuilder 由于前面学习了StringBuffer和StringBuilder的父类A ...

  2. 从源码学习Java并发的锁是怎么维护内部线程队列的

    从源码学习Java并发的锁是怎么维护内部线程队列的 在上一篇文章中,凯哥对同步组件基础框架- AbstractQueuedSynchronizer(AQS)做了大概的介绍.我们知道AQS能够通过内置的 ...

  3. Shiro源码解析-Session篇

    上一篇Shiro源码解析-登录篇中提到了在登录验证成功后有对session的处理,但未详细分析,本文对此部分源码详细分析下. 1. 分析切入点:DefaultSecurityManger的login方 ...

  4. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

  5. 基于Redis缓存的Session共享(附源码)

    基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...

  6. JDK源码学习--String篇(二) 关于String采用final修饰的思考

    JDK源码学习String篇中,有一处错误,String类用final[不能被改变的]修饰,而我却写成静态的,感谢CTO-淼淼的指正. 风一样的码农提出的String为何采用final的设计,阅读JD ...

  7. Tomcat源码分析——Session管理分析(下)

    前言 在<TOMCAT源码分析——SESSION管理分析(上)>一文中我介绍了Session.Session管理器,还以StandardManager为例介绍了Session管理器的初始化 ...

  8. 源码学习系列之SpringBoot自动配置(篇一)

    源码学习系列之SpringBoot自动配置源码学习(篇一) ok,本博客尝试跟一下Springboot的自动配置源码,做一下笔记记录,自动配置是Springboot的一个很关键的特性,也容易被忽略的属 ...

  9. .NET Core 2.1 源码学习:看 SocketsHttpHandler 如何在异步方法中连接 Socket

    在 .NET Core 2.1 中,System.Net.Sockets 的性能有了很大的提升,最好的证明是 Kestrel 与 HttpClient 都改为使用 System.Net.Sockets ...

随机推荐

  1. 路由分发原则 get最终传递给get post最终传递给post

  2. BZOJ 1040 骑士(环套树DP)

    如果m=n-1,显然这就是一个经典的树形dp. 现在是m=n,这是一个环套树森林,破掉这个环后,就成了一个树,那么这条破开的边连接的两个顶点不能同时选择.我们可以对这两个点进行两次树形DP根不选的情况 ...

  3. 转 :hlda文献学习笔记

    David M.BLEI nCR文献学习笔记(基本完成了)  http://yhbys.blog.sohu.com/238343705.html 题目:The Nested Chinese Resta ...

  4. 推荐算法相关总结表(包括DM)

    推荐算法总结表 表1 推荐算法分类 个性化推荐算法分类 启发式算法 基于模型 基于内容 TF-IDF 聚类 最大熵 相似度度量 贝叶斯分类 决策树 神经网络 专家系统 知识推理 协同过滤 K近邻 聚类 ...

  5. Android APP性能优化(最新总结)

    导语   安卓大军浩浩荡荡,发展已近十个年头,技术优化日异月新,如今Android 8.0 Oreo 都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得And ...

  6. Codeforces Round #466 (Div. 2) E. Cashback

    Codeforces Round #466 (Div. 2) E. Cashback(dp + 贪心) 题意: 给一个长度为\(n\)的序列\(a_i\),给出一个整数\(c\) 定义序列中一段长度为 ...

  7. BZOJ1599 find the mincost route 【floyd】

    题目链接 BZOJ1599 题解 最小环模板?周末了养生一下[逃] 解释一下原理 \(floyd\)算法每一轮求出以\([1,k]\)为中介点的最短路 我们对于一个环,考虑环上编号最大的点,在\(k\ ...

  8. nodejs创建多层目录

    1. fs.mkdir不能一次创建多层目录,必须先创建上层目录,再创建下层目录 //同步 fs.mkdirSync("./tmp/"); fs.mkdirSync("./ ...

  9. Spring面试,IoC和AOP的理解(转)

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  10. mysql的IFNULL()函数FLOOR(),ROUND()函数

    用法说明 1 IFNULL(expr1,expr2) 如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2. IFNULL()返回一个数字或字符串值,取决于它被 ...