# session-file-store

> Session file store is a provision for storing session data in the session file

Latest version **1.5.0** (published 2020-10-05) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install session-file-store
pnpm add session-file-store
yarn add session-file-store
bun add session-file-store
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.5.0 |
| Published | 2020-10-05 |
| First published | 2014-10-12 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | separate (@types/session-file-store) |
| Module format | CommonJS |
| Node | >= 6 |
| Dependencies | 6 |
| Unpacked size | 21.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 193 |
| Author | Valery Barysok |
| Maintainers | valery-barysok |
| Keywords | session, file, store, express, connect |

## Links

- npm: https://www.npmjs.com/package/session-file-store
- Repository: https://github.com/valery-barysok/session-file-store
- Issues: https://github.com/valery-barysok/session-file-store/issues
- npm.io page: https://npm.io/package/session-file-store

## Dependencies (6)

- [retry](https://npm.io/package/retry.md) ^0.12.0
- [bagpipe](https://npm.io/package/bagpipe.md) ^0.3.5
- [fs-extra](https://npm.io/package/fs-extra.md) ^8.0.1
- [kruptein](https://npm.io/package/kruptein.md) ^2.0.4
- [object-assign](https://npm.io/package/object-assign.md) ^4.1.1
- [write-file-atomic](https://npm.io/package/write-file-atomic.md) 3.0.3

## Alternatives

- [unionfs](https://npm.io/package/unionfs.md) — 2.2M weekly downloads
- [path-starts-with](https://npm.io/package/path-starts-with.md) — 35.9K weekly downloads
- [redzip](https://npm.io/package/redzip.md) — 1.2K weekly downloads
- [vscode-anymatch](https://npm.io/package/vscode-anymatch.md) — 848 weekly downloads
- [@ledgerhq/coin-filecoin](https://npm.io/package/@ledgerhq/coin-filecoin.md) — 793 weekly downloads

## Recent versions

- 1.5.0 (latest) — 2020-10-05
- 1.4.0 — 2020-01-28
- 1.3.1 — 2019-07-10
- 1.3.0 — 2019-06-09
- 1.2.0 — 2017-11-29
- 1.1.2 — 2017-08-07
- 1.1.1 — 2017-07-28
- 1.1.0 — 2017-07-28
- 1.0.0 — 2016-11-19
- 0.2.2 — 2016-10-09
- 0.2.1 — 2016-08-16
- 0.2.0 — 2016-03-04
- 0.1.0 — 2016-03-04
- 0.0.24 — 2015-12-15
- 0.0.23 — 2015-12-12
- … 20 more at https://npm.io/package/session-file-store/versions

## README

# session-file-store

Session file store for [Express](http://expressjs.com/) and [Connect](https://github.com/senchalabs/connect).
Also you can use it with [Koa](http://koajs.com/)

[![NPM Version][npm-version-image]][npm-url]
[![NPM Downloads][npm-downloads-image]][npm-url]
[![Node.js Version][node-image]][node-url]
[![Build Status][travis-image]][travis-url]
[![Coverage Status][coveralls-image]][coveralls-url]

Session file store is a provision for storing session data in the session file

## Compatibility

* Supports Express `>= 4.x` and Connect `>= 1.4.0` through [express-session][express-session-url]
* Supports [Node.js][node-url] `>= 8`
* Indirectly supports Koa `>= 0.9.0` through [express-session][express-session-url]

## Getting Started

### Installation

    $ npm install session-file-store

### Running Tests

    $ npm install
    $ npm test

## Options

  - `path`               The directory where the session files will be stored. Defaults to `./sessions`
  - `ttl`                Session time to live in seconds. Defaults to `3600`
  - `retries`            The number of retries to get session data from a session file. Defaults to `5`
  - `factor`             The exponential factor to use for retry. Defaults to `1`
  - `minTimeout`         The number of milliseconds before starting the first retry. Defaults to `50`
  - `maxTimeout`         The maximum number of milliseconds between two retries. Defaults to `100`
  - `reapIntervalObject` [OUT] Contains intervalObject if reap was scheduled
  - `reapInterval`       Interval to clear expired sessions in seconds or -1 if do not need. Defaults to `1 hour`
  - `reapAsync`          use distinct worker process for removing stale sessions. Defaults to `false`
  - `reapSyncFallback`   reap stale sessions synchronously if can not do it asynchronously. Default to `false`
  - `logFn`              log messages. Defaults to `console.log`
  - `fallbackSessionFn`  returns fallback session object after all failed retries. No defaults
  - `encoding`           Object-to-text text encoding. Can be null. Defaults to `'utf8'`
  - `encoder`            Encoding function. Takes object, returns encoded data. Defaults to `JSON.stringify`
  - `decoder`            Decoding function. Takes encoded data, returns object. Defaults to `JSON.parse`
  - `fileExtension`      File extension of saved files. Defaults to `'.json'`
  - `secret`             Enables transparent encryption support conforming to [OWASP's Session Management](https://owasp.org/www-project-cheat-sheets/cheatsheets/Session_Management_Cheat_Sheet.html) best practices.
  - `crypto.algorithm`   Defaults to `aes-256-gcm` but supports symmetric algorithms listed from `crypto.getCiphers()`.
  - `crypto.hashing`     Defaults to `sha512` but supports hashing algorithms listed from `crypto.getHashes()`.
  - `crypto.use_scrypt`  Defaults to `true`. When not supported (node < 10.5) will fall back to the `crypto.pbkdf2()` key derivation function.

## Usage

### Express or Connect integration

Due to express `>= 4` changes, we need to pass `express-session` to the function `session-file-store` exports in order to extend `session.Store`:

```js
var session = require('express-session');
var FileStore = require('session-file-store')(session);

var fileStoreOptions = {};

app.use(session({
    store: new FileStore(fileStoreOptions),
    secret: 'keyboard cat'
}));
```

## Examples

You can find basic work [app examples](https://github.com/valery-barysok/session-file-store/tree/master/examples)
for [express](https://github.com/valery-barysok/session-file-store/tree/master/examples/express-example),
[connect](https://github.com/valery-barysok/session-file-store/tree/master/examples/connect-example) and
[koa](https://github.com/valery-barysok/session-file-store/tree/master/examples/koa-example) frameworks in `examples` folder.

[npm-version-image]: https://img.shields.io/npm/v/session-file-store.svg?style=flat-square
[npm-downloads-image]: https://img.shields.io/npm/dm/session-file-store.svg?style=flat-square
[npm-url]: https://npmjs.org/package/session-file-store
[travis-image]: https://img.shields.io/travis/valery-barysok/session-file-store/master.svg?style=flat-square
[travis-url]: https://travis-ci.org/valery-barysok/session-file-store
[coveralls-image]: https://img.shields.io/coveralls/valery-barysok/session-file-store/master.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/valery-barysok/session-file-store?branch=master
[node-image]: https://img.shields.io/node/v/session-file-store.svg?style=flat-square
[node-url]: http://nodejs.org/download/
[express-session-url]: https://github.com/expressjs/session

---
_Source: https://npm.io/package/session-file-store · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
