session 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
session 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
session 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT License
开发语言 JavaScript
操作系统 跨平台
软件类型 开源软件
所属分类 Web应用开发Web框架
开源组织
地区 不详
投 递 者 首席测试
适用人群 未知
收录时间 2021-11-30

软件简介

koa-session

NPM version build status Test coverage Gittip David deps iojs version node version npm download

Simple session middleware for Koa. Defaults to cookie-based sessions and supports external stores.

Requires Node 7.6 or greater for async/await support

Installation

$ npm install koa-session

Notice

6.x changed the default cookie key from koa:sess to koa.sess to ensure set-cookie value valid with HTTP spec.see issue. If you want to be compatible with the previous version, you can manually set config.key to koa:sess.

Example

View counter example:

const session = require('koa-session');
const Koa = require('koa');
const app = new Koa();

app.keys = ['some secret hurr'];

const CONFIG = {
  key: 'koa.sess', /** (string) cookie key (default is koa.sess) */
  /** (number || 'session') maxAge in ms (default is 1 days) */
  /** 'session' will result in a cookie that expires when session/browser is closed */
  /** Warning: If a session cookie is stolen, this cookie will never expire */
  maxAge: 86400000,
  autoCommit: true, /** (boolean) automatically commit headers (default true) */
  overwrite: true, /** (boolean) can overwrite or not (default true) */
  httpOnly: true, /** (boolean) httpOnly or not (default true) */
  signed: true, /** (boolean) signed or not (default true) */
  rolling: false, /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */
  renew: false, /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
  secure: true, /** (boolean) secure cookie*/
  sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
};

app.use(session(CONFIG, app));
// or if you prefer all default config, just use => app.use(session(app));

app.use(ctx => {
  // ignore favicon
  if (ctx.path === '/favicon.ico') return;

  let n = ctx.session.views || 0;
  ctx.session.views = ++n;
  ctx.body = n + ' views';
});

app.listen(3000);
console.log('listening on port 3000');

API

Options

The cookie name is controlled by the key option, which defaults to "koa.sess". All other options are passed to ctx.cookies.get() and ctx.cookies.set() allowing you to control security, domain, path, and signing among other settings.

Custom encode/decode Support

Use options.encode and options.decode to customize your own encode/decode methods.

Hooks

  • valid(): valid session value before use it
  • beforeSave(): hook before save session

External Session Stores

The session is stored in a cookie by default, but it has some disadvantages:

You can store the session content in external stores (Redis, MongoDB or other DBs) by passing options.store with three methods (these need to be async functions):

  • get(key, maxAge, { rolling, ctx }): get session object by key
  • set(key, sess, maxAge, { rolling, changed, ctx }): set session object for key, with a maxAge (in ms)
  • destroy(key, {ctx}): destroy session for key

Once you pass options.store, session storage is dependent on your external store -- you can't access the session if your external store is down. Use external session stores only if necessary, avoid using session as a cache, keep the session lean, and store it in a cookie if possible!

The way of generating external session id is controlled by the options.genid(ctx), which defaults to uuid.v4().

If you want to add prefix for all external session id, you can use options.prefix, it will not work if options.genid(ctx) present.

If your session store requires data or utilities from context, opts.ContextStore is also supported. ContextStore must be a class which claims three instance methods demonstrated above. new ContextStore(ctx) will be executed on every request.

Events

koa-session will emit event on app when session expired or invalid:

  • session:missed: can't get session value from external store.
  • session:invalid: session value is invalid.
  • session:expired: session value is expired.

Custom External Key

External key is used the cookie by default, but you can use options.externalKey to customize your own external key methods. options.externalKey with two methods:

  • get(ctx): get the external key
  • set(ctx, value): set the external key

Session#isNew

Returns true if the session is new.

if (this.session.isNew) {
  // user has not logged in
} else {
  // user has already logged in
}

Session#maxAge

Get cookie's maxAge.

Session#maxAge=

Set cookie's maxAge.

Session#externalKey

Get session external key, only exist when external session store present.

Session#save()

Save this session no matter whether it is populated.

Session#manuallyCommit()

Session headers are auto committed by default. Use this if autoCommit is set to false.

Destroying a session

To destroy a session simply set it to null:

this.session = null;

License

MIT

展开阅读全文

代码

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2013/01/18 10:20

php session 及 session 原理

 今天想用一个session来实现用户登录判断,也算是对之前session的探究,查了下资料session的运行机制如下:   session是服务器端的一种会话机制,当客户端的请求服务器创建一个session时,服务器会先检测该请求里面是否包含一个惟一的sessionID,如果是,说明服务器已经为该用户创建过session,只要按照该sesionID检索出该用户的session供用户使用,如果没有sessionID,服务器会为该用户新建一个带有唯一表示服sessionID的s...

0
12
发表于开发技能专区
2014/10/05 12:52

$_SESSION和session_start示例

$_SESSION $HTTP_SESSION_VARS [已弃用] $_SESSION -- $HTTP_SESSION_VARS [已弃用] — Session 变量 说明 当前脚本可用 SESSION 变量的数组。更多关于如何使用的信息,参见 Session 函数 文档。 $HTTP_SESSION_VARS包含相同的信息,但它不是一个超全局变量。 (注意$HTTP_SESSION_VARS和$_SESSION是不同的变量,PHP 处理它们的方式不同) 更新日志 版本 说明 4.1.0 引入$_SESSION,弃用$HTTP_SESSION_VARS。 注释 Note: “Super...

0
0
发表了博客
2012/11/12 11:32

kill session-KILL_SESSION()

一. 开发背景# 做kill session操作时需要考虑session 占用的回滚段大小. 本程序所有查询结果均排除username为null的会话。 二. 流程图# 三. 参数说明# 1. 函数头#  function kill_session(kill            varchar2 default 'false',                         filter_name     varchar2 default null,                         filter_word     varchar2 default null,             ...

0
0
发表于大前端专区
2014/03/26 16:32

session replication 和session sticky

是多台J2EE服务器集群时的会话策略问题。 因为session是存在服务器端的,多台服务器集群时, session replication 策略是复制会话,即一个用户访问了一次就把session复制到所有的服务器或这一部分服务器。这样的好处是如果正访问的服务器down了 用户可以自动被转到别的服务器session不丢失。缺点当然是效率低。 session sticky策略则是不复制,一个用户访问了一次后,同一个session周期内,所有的请求都定向到这个服务器,dow...

0
0
发表了博客
2019/04/12 16:03

Session与Cookie(自定义Session)

一、会话管理   会话管理: 管理浏览器客户端 和 服务器端之间会话过程中产生的会话数据。   域对象: 实现资源之间的数据共享。   request域对象   context域对象   会话技术:       Cookie技术:会话数据保存在浏览器客户端。     Session技术:会话数据保存在服务器端。存放在内存里面,客户端与服务器端之前的通讯使用SessionId 二、Cookie技术 2.1 特点:Cookie技术:会话数据保存在浏览器客户端。 ...

0
0
发表了博客
2019/09/24 20:58

Session服务器之Session复制!

全部运行在Tomcat下 第一台主机:192.168.200.131 安装nginx 修改hosts文件 [root@localhost ~]# vim /etc/hosts 192.168.200.131 nginx 192.168.200.130 node1 192.168.200.122 node2 //将hosts文件发送给另外两台主机 [root@nginx ~]# scp /etc/hosts 192.168.200.122:/etc [root@nginx ~]# scp /etc/hosts 192.168.200.130:/etc //关闭防火墙及安全机制 [root@localhost ~]# iptables -F [root@localhost ~]# systemctl stop...

0
0
发表了博客
2018/09/20 10:22

Session

Cookie: 是浏览器端的数据存储技术 Session: session技术是依赖Cookie技术的服务器端的数据存储技术。由服务器创建。 问题:一个用户的不同请求处理的数据共享怎么办? 解决:session技术。 原理:用户第一访问服务器,服务器会创建一个session 对象给此用户,并将该session对象的JSESSIONID 使用Cookie技术存储到浏览器中,保证用户的其他请求能够获得同一个session对象,也保证了不同请求能够过获取到。 特点: Session技术是...

0
0
发表了博客
2014/01/15 11:22

Session

A Session object is a single-threaded context for producing and consuming messages. Although it may allocate provider resources outside the Java virtual machine (JVM), it is considered a lightweight JMS object. A session serves several purposes: It is a factory for its message producers and consumers. It supplies provider-optimized message factories. It is a factory for TemporaryTopics and Temp...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部