session of express

1、express-session

  一个提供session功能库

npm install express-session --save
var session = require('express-session')

  1)session的key必须与cookieParser的key一致

app.use(cookieParser(serverConfig.cookieKey));
app.use(session({
key: 'session_cookie_name',
secret: serverConfig.sessionKey,
store: sessionStore,
resave: true,
saveUninitialized: false
}));

  2)resave选项,true | false。当session未发生变化时,是否将session重新写入数据库(重置expires,即重新计时)。

  对于这个选项,有几个方面需要注意。

    a)如果为true,则用户每一次刷新,都会写入一次数据库,此时最好将session存储于高性能的redis中。

    b)如果为false,则只有session有变化时,才写入数据库,对数据库压力较小。

    c)当为true时,会有并发冲突问题。例如当前有一个写请求A到达,正在处理, 此时又有一个读请求B到达。因为B到达时,A还没写入,所以显示B的状态不包含A的修改。写请求A完成后,读请求B存入数据库,结果将写请求A的操作给覆盖了(相当于没写)。

  3)saveUninitialized,true | false。是否保存未曾过入的session(空session)。

    Forces a session that is "uninitialized" to be saved to the store. A session is uninitialized when it is new but not modified.

    a)当为true时,当一个客户端第一次访问后服务器后,接下来的expires小时里,这个客户端都有拥有同一个session。

    b)当为false时,当一个客户端第一次访问后服务器后,接下来的所有请求,都会给出不同的session,直到有一个对session的写入为止,则会产生持久session。

2、express-mysql-session

  一个为express-session提供持久化存储功能库。

npm install express-mysql-session --save
var express = require('express');
var app = module.exports = express();
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session); var options = {
host: 'localhost',
port: 3306,
user: 'session_test',
password: 'password',
database: 'session_test' //写入哪个数据库,注意,使用前需手动创建好database
}; var sessionStore = new MySQLStore(options); app.use(session({
key: 'session_cookie_name',
secret: 'session_cookie_secret',
store: sessionStore,
resave: false,
saveUninitialized: false
}));

  1)saveUninitialized:是否保存一个空session。在没有为session赋值的情况下,当为false时,每次刷新都会得到一个不一样的session,当为true时,每次刷新会得到同样的session。

  2)express-mysql-session所有可配选项如下:

var options = {
host: 'localhost',// Host name for database connection.
port: 3306,// Port number for database connection.
user: 'session_test',// Database user.
password: 'password',// Password for the above database user.
database: 'session_test',// Database name.
checkExpirationInterval: 900000,// How frequently expired sessions will be cleared; milliseconds.
expiration: 86400000,// The maximum age of a valid session; milliseconds.
createDatabaseTable: true,// Whether or not to create the sessions database table, if one does not already exist.
connectionLimit: 1,// Number of connections when creating a connection pool
schema: {
tableName: 'sessions',
columnNames: {
session_id: 'session_id',
expires: 'expires',
data: 'data'
}
}
};

    需要注意,

      a)expiration:最大过期时间,默认值是24个小时。默认生成的session,其expires即为24小时。

      b)checkExpirationInterval,每隔多久检查一次expires。默认为15分钟。

参考:

1、https://www.npmjs.com/package/express-session

2、https://www.npmjs.com/package/express-mysql-session

session of express的更多相关文章

  1. 在nodejs使用Redis缓存和查询数据及Session持久化(Express)

    在nodejs使用Redis缓存和查询数据及Session持久化(Express) https://segmentfault.com/a/1190000002488971

  2. [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)

    本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...

  3. express session 和 socketio session关联

    express session http是没有状态的协议, 需要web框架自己实现会话和会话管理工作. express框架有session插件可以使用. 见如下介绍: https://www.tuto ...

  4. Express 4 中如何使用connect-mongo

    正在跟随上面的教程一步一步做,在会话支持那一节中安装 connect-mongo 后,添加: var MongoStore = require('connect-mongo')(express); v ...

  5. nodejs:express 4.x

    最近学习express,最新的版本到了4.x,与之前的3.0版本相比,变化还是很大的.网上的教程很多都是基于3.0的,再编译一个例子的时候,吃了不少苦头.现总结一下express4.x的变化. 安装: ...

  6. Express 4 更新改变文档

    概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一 ...

  7. 迁移到 Express 4.x

    原文地址: http://expressjs.com/migrating-4.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...

  8. [转] Express 4 中的变化

    http://www.cnblogs.com/haogj/p/3985438.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...

  9. Moving to Express 4

    http://expressjs.com/guide/migrating-4.html Moving to Express 4 Overview Express 4 is a breaking cha ...

随机推荐

  1. jQuery对象的属性操作

    jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如attr().removeAttr ...

  2. 乌龟svn不能拉取代码的原因

    因为一个账号只能在一个客户端登陆,用同一个账号的话,必然有一个会拉取失败,提示unable connect to url 解决方法: 清楚一下即可

  3. centos安装dlib

    小心这个错误 c++: 编译器内部错误:已杀死(程序 cc1plus)     # 内存不足,可解决的 复制如下命令: yum install cmake python-devel numpy gcc ...

  4. 代码:PC 链接列表面板border的一种做法(每行之间有分割线)

    PC 链接列表面板,border的一种做法 做页面经常遇到一种问题,上面是标题,下面是单行链接列表.为了保证后台套页面方便,所有列表项必须完全一样.但我们无法解决第一行或最后一行多出来的分割线. 使用 ...

  5. 10.纯 CSS 创作一个同心圆弧旋转 loader 特效

    原文地址:https://segmentfault.com/a/1190000014682999 想到了扇形:正方形 ->border-radius: 50%; ->取四份中的任意一份. ...

  6. web session 原理1

     原理 我们都知道,浏览器无状态的.浏览器是操作不了session的,浏览器能够做的只是传递cookie,每次都传递. 把当前主机下的,和当前请求相同域下的cookie 传递到服务器去,只要cooki ...

  7. kong API gateway

    参考:https://www.cnblogs.com/chenjinxi/p/8724564.html 一.简介 Kong,是由Mashape公司开源的,基于Nginx的API gateway. 二. ...

  8. 在IAR调用Notepad++

    之前写过在keil调用Notepad++,这次讲一下怎么在IAR调用Notepad++. 好了上步骤: 打开IAR软件,选择‘Tools’-->'Configure Tools' 2.如下图,在 ...

  9. JS与Android交互

    一.Android调用JS 2种方法 1.通过WebView的loadUrl 2.通过WebView的evaluateJavascript

  10. 使用spring validation完成数据后端校验

    前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验.但是为了避免用户绕过浏览器,使用http工具直接向后端请求 ...