当前位置:  开发笔记 > 后端 > 正文

hapi js是否使用redis来分享会话?

如何解决《hapijs是否使用redis来分享会话?》经验,为你挑选了1个好方法。

ExpressJS通常使用Redis来跨多个节点js进程共享会话.hapiJs使用类似的技术吗?



1> Matt Harriso..:

在我回答你的问题之前,我想给一些背景知识.是的,您可以使用Redis进行共享会话,但首先要确保它是您真正想要/需要的东西在会话方面,hapi和Express会有所不同.

如果您已经确定这是您想要的设置,请跳至第2部分.

1.背景

在Express中,存储在cookie中的唯一内容就是会话ID.这意味着当您需要扩展到单个服务器之外时,您需要以某种方式查看它们之间的共享会话.Redis是一种选择.

注意会话数据不会保存在cookie本身中,只会保存在会话ID中.会话数据存储在服务器端.

https://github.com/expressjs/session#sessionoptions

hapi Yar的官方会话插件采用与Express略有不同的方法.只要您尝试存储在会话中的数据低于此值maxCookieSize,整个会话将被加密(通过Iron)并存储在cookie中.这意味着您不需要任何额外的机器服务器端水平扩展,因为客户端会记住所有内容.

但是,如果这不符合您的要求,或者你不喜欢它,你可以通过设置亚尔的强制服务器端存储maxCookieSize0.

maxCookieSize - 使用服务器端存储之前的最大cookie大小.默认为1K.设置为零以始终使用服务器端存储.

https://github.com/hapijs/yar/blob/master/API.md

2.将Redis与Yar和服务器端存储一起使用

将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');
    });
});


谢谢!这是一个非常明确的答案.我喜欢hapi js提供的替代品.我想我会将会话数据存储在cookie中,因为数据非常小.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有