• 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

  • 相关阅读:
    Let Us Adore 让我们来敬拜祂 中文歌词
    Way Maker 开路者 歌词
    Great Things 伟大的事 歌词
    永活盼望 Living Hope 歌词
    TP 控制器和模型里面order 写法不同
    服务器安全记录
    NOTIC: [8] Trying to get property of non-object
    Declaration of AdminControllerGameController::delete() should be compatible with。。
    vi编辑器操作 快捷键
    Camtasia如何录制小文件视频
  • 原文地址:https://www.cnblogs.com/tekkaman/p/7021474.html
Copyright © 2020-2023  润新知