Mat*_*son 14
在我回答你的问题之前,我想给一些背景知识.是的,您可以使用Redis进行共享会话,但首先要确保它是您真正想要/需要的东西在会话方面,hapi和Express会有所不同.
如果您已经确定这是您想要的设置,请跳至第2部分.
在Express中,存储在cookie中的唯一内容就是会话ID.这意味着当您需要扩展到单个服务器之外时,您需要以某种方式查看它们之间的共享会话.Redis是一种选择.
注意会话数据不会保存在cookie本身中,只会保存在会话ID中.会话数据存储在服务器端.
hapi Yar的官方会话插件采用与Express略有不同的方法.只要您尝试存储在会话中的数据低于此值maxCookieSize,整个会话将被加密(通过Iron)并存储在cookie中.这意味着您不需要任何额外的机器服务器端水平扩展,因为客户端会记住所有内容.
但是,如果这不符合您的要求,或者你不喜欢它,你可以通过设置亚尔的强制服务器端存储maxCookieSize到0.
maxCookieSize- 使用服务器端存储之前的最大cookie大小.默认为1K.设置为零以始终使用服务器端存储.
将Yar与服务器端存储一起使用时,hapi将使用其缓存功能来存储您的数据.例如,要使用Redis,只需将Redis cache配置传递给Yar:
const Hapi = require('hapi');
const Hoek = require('hoek');
const server = new Hapi.Server({
cache: {
engine: require('catbox-redis'),
name: 'session', // cache name
host: '127.0.0.1', // redis host
port: 6379, // redis port
database: 'my-db' // redis-db
}
});
server.register({
register: require('yar'),
options: {
maxCookieSize: 0, // force server-side storage
cache: {
cache: 'session'
},
cookieOptions: {
password: 'U32KuiKPnVguRKM', // cookie password
isSecure: false // allow non HTTPS
}
}
}, (err) => {
Hoek.assert(!err, err);
server.start((err) => {
Hoek.assert(!err, err);
console.log('Started server');
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1882 次 |
| 最近记录: |