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
session of express的更多相关文章
- 在nodejs使用Redis缓存和查询数据及Session持久化(Express)
在nodejs使用Redis缓存和查询数据及Session持久化(Express) https://segmentfault.com/a/1190000002488971
- [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...
- express session 和 socketio session关联
express session http是没有状态的协议, 需要web框架自己实现会话和会话管理工作. express框架有session插件可以使用. 见如下介绍: https://www.tuto ...
- Express 4 中如何使用connect-mongo
正在跟随上面的教程一步一步做,在会话支持那一节中安装 connect-mongo 后,添加: var MongoStore = require('connect-mongo')(express); v ...
- nodejs:express 4.x
最近学习express,最新的版本到了4.x,与之前的3.0版本相比,变化还是很大的.网上的教程很多都是基于3.0的,再编译一个例子的时候,吃了不少苦头.现总结一下express4.x的变化. 安装: ...
- Express 4 更新改变文档
概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一 ...
- 迁移到 Express 4.x
原文地址: http://expressjs.com/migrating-4.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...
- [转] Express 4 中的变化
http://www.cnblogs.com/haogj/p/3985438.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...
- Moving to Express 4
http://expressjs.com/guide/migrating-4.html Moving to Express 4 Overview Express 4 is a breaking cha ...
随机推荐
- oracle 表或视图不存在
导入导出时,会自动表名自动加上了““双引号需要将表名改一下就可以了 alter table "oldtablename" rename to newtableName;
- pychram 2018-01 安装pyQT5报错
pychram 2018-01 安装pyQT5报错
- StringBuffer 清除内容
在开发的时候,经常使用StringBuffer来进行字符串的拼接.如果反复的做字符串拼接时,有时需要清空Stringbuffer中的内容,然后再拼接新的字符串信息. StringBuffer提供了以下 ...
- 从一个异常探索spring autowired 的原理
从一个异常探索autowired 的原理. 首先环境是这样的: public class Boss { @Autowired private Car car; } //@Component 加上这个注 ...
- .bat脚本基本命令语法 http://www.cnblogs.com/iTlijun/p/6137027.html
这个是我找到的非常好的一篇文章了: 目录批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1.REM 和 :: 2.ECHO 和 @ 3.PAUSE 4.ERR ...
- axios请求带上cookie配置
Axios.defaults.withCredentials = true 参考:https://segmentfault.com/a/1190000008872646
- PE 装机
PE 装机 下载PE安装到硬盘启动. 下载win7安装原始文件ISO镜像文件,解压ISO到文件夹. 重启电脑,选择PE菜单. 打开windows安装器大全>选择 winntSetup> i ...
- PHP中汉字截取
$len = 19; $text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?"; echo strlen($text)<=$len ? $text ...
- 微信小程序实例源码大全下载
小程序QQ交流群:131894955 小程序开发直播腾讯课堂: https://edu.csdn.net/course/detail/6743 微信小程序实例源码大全下载 微信小应用示例代码(p ...
- es6初级之箭头函数实现隔行变色
无论是使用哪种方式实现隔行变色的效果,它的思路都是一样的: 1.定义很多个div 2.给div 加背景 3.鼠标移动到div上时,当前div 背景变色 4.鼠标移出div时,当前div背景恢复 以上4 ...