session of express

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

时间: 2024-10-12 13:34:13

session of express的相关文章

express session 和 socketio session关联

express session http是没有状态的协议, 需要web框架自己实现会话和会话管理工作. express框架有session插件可以使用. 见如下介绍: https://www.tutorialspoint.com/expressjs/expressjs_sessions.htm We will need the Express-session, so install it using the following code. npm install --save express-s

express中使用express-session记录登陆状态

一般在当浏览器关闭后会自动清除session var express = require("express"); var app = express(); var session = require("express-session"); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true })); app.get("/",functio

nodejs:express 4.x

最近学习express,最新的版本到了4.x,与之前的3.0版本相比,变化还是很大的.网上的教程很多都是基于3.0的,再编译一个例子的时候,吃了不少苦头.现总结一下express4.x的变化. 安装: 安装就不用多说了,如果不想用最新的版本,安装之前的版本,$ npm install -g [email protected] 4.0与3.0具体的差别,看一下 Migrating from 3.x to 4.x 的文档会明白. 如果是 npm install -g express命令安装,但是,安

迁移到 Express 4.x

迁移到 Express 4.x 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一个从 Express 3 迁移到 Express 4 的示例 升级到 Express 4 的应用生成器 Express 4 中的变化 主要的变化如下: Express 的核心和中间件系统:对 Connect 和内建中间件的依赖被移除了.所以你必须自己添加中间件. 路由

Express 4 中如何使用connect-mongo

正在跟随上面的教程一步一步做,在会话支持那一节中安装 connect-mongo 后,添加: var MongoStore = require('connect-mongo')(express); var settings = require('./settings'); 和 app.use(express.cookieParser()); app.use(express.session({ // ...... }) })); 之后运行报错: Error: Most middleware (li

express框架

前面的话 Express是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助开发者创建各种 Web 和移动设备应用.本文将详细介绍express框架 概述 官网对Express的描述,它是一个基于 Node.js 平台,快速.开放.极简的 web 开发框架.优点是易上手.高性能.扩展性强 1.易上手:nodejs最初就是为了开发高性能web服务器而被设计出来的,然而相对底层的API会让不少新手望而却步.express对web开发相关的模块进行了适度的封装,屏蔽

node、express框架

前面的话 Express是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助开发者创建各种 Web 和移动设备应用.本文将详细介绍express框架 概述 官网对Express的描述,它是一个基于 Node.js 平台,快速.开放.极简的 web 开发框架.优点是易上手.高性能.扩展性强 1.易上手:nodejs最初就是为了开发高性能web服务器而被设计出来的,然而相对底层的API会让不少新手望而却步.express对web开发相关的模块进行了适度的封装,屏蔽

Express 4 更新改变文档

概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一个从 Express 3 迁移到 Express 4 的示例 升级到 Express 4 的应用生成器 Express 4 中的变化 主要的变化如下: Express 的核心和中间件系统:对 Connect 和内建中间件的依赖被移除了.所以你必须自己添加中间件. 路由系统 其它 参见: 4.X 中的

[转] Express 4 中的变化

http://www.cnblogs.com/haogj/p/3985438.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一个从 Express 3 迁移到 Express 4 的示例 升级到 Express 4 的应用生成器 Express 4 中的变化 主要的变化如下: Express 的核心和中间件系统:对 Connect 和内