第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何與Socket.IO1.x和Express 4.x共享會(huì)話?

如何與Socket.IO1.x和Express 4.x共享會(huì)話?

幕布斯6054654 2019-07-15 10:14:03
如何與Socket.IO1.x和Express 4.x共享會(huì)話?如何與Socket.io 1.0和Express 4.x共享會(huì)話?我使用Redis商店,但我相信這不重要。我知道我必須使用中間件來(lái)查看cookie和獲取會(huì)話,但不知道如何使用。我找了找,卻找不到工作。    var RedisStore = connectRedis(expressSession);     var session = expressSession({         store: new RedisStore({             client: redisClient        }),         secret: mysecret,         saveUninitialized: true,         resave: true     });     app.use(session);     io.use(function(socket, next) {         var handshake = socket.handshake;         if (handshake.headers.cookie) {             var str = handshake.headers.cookie;             next();         } else {             next(new Error('Missing Cookies'));         }     });
查看完整描述

3 回答

?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

就在一個(gè)半月前,我處理了同樣的問(wèn)題,后來(lái)寫了一篇廣泛的文章。博客帖子在這個(gè)問(wèn)題上,它與一個(gè)充分發(fā)揮作用的問(wèn)題結(jié)合在一起演示應(yīng)用程序托管在GitHub上。解決方案依賴于特快會(huì)議cookie解析器連紅節(jié)點(diǎn)模塊來(lái)連接所有的東西。它允許您訪問(wèn)和修改來(lái)自REST和Socket上下文的會(huì)話,這是非常有用的。

中間件設(shè)置是兩個(gè)關(guān)鍵部分:

app.use(cookieParser(config.sessionSecret));app.use(session({
    store: redisStore,
    key: config.sessionCookieKey,
    secret: config.sessionSecret,
    resave: true,
    saveUninitialized: true}));

.和SocketIO服務(wù)器設(shè)置:

ioServer.use(function (socket, next) {
    var parseCookie = cookieParser(config.sessionSecret);
    var handshake = socket.request;

    parseCookie(handshake, null, function (err, data) {
        sessionService.get(handshake, function (err, session) {
            if (err)
                next(new Error(err.message));
            if (!session)
                next(new Error("Not authorized"));

            handshake.session = session;
            next();
        });
    });});

它們與我創(chuàng)建的一個(gè)簡(jiǎn)單的sessionService模塊一起使用,它允許您對(duì)會(huì)話執(zhí)行一些基本操作,代碼如下所示:

var config = require('../config');var redisClient = null;var redisStore = null;var self = module.exports = {
    initializeRedis: function (client, store) {
        redisClient = client;
        redisStore = store;
    },
    getSessionId: function (handshake) {
        return handshake.signedCookies[config.sessionCookieKey];
    },
    get: function (handshake, callback) {
        var sessionId = self.getSessionId(handshake);

        self.getSessionBySessionID(sessionId, function (err, session) {
            if (err) callback(err);
            if (callback != undefined)
                callback(null, session);
        });
    },
    getSessionBySessionID: function (sessionId, callback) {
        redisStore.load(sessionId, function (err, session) {
            if (err) callback(err);
            if (callback != undefined)
                callback(null, session);
        });
    },
    getUserName: function (handshake, callback) {
        self.get(handshake, function (err, session) {
            if (err) callback(err);
            if (session)
                callback(null, session.userName);
            else
                callback(null);
        });
    },
    updateSession: function (session, callback) {
        try {
            session.reload(function () {
                session.touch().save();
                callback(null, session);
            });
        }
        catch (err) {
            callback(err);
        }
    },
    setSessionProperty: function (session, propertyName, propertyValue, callback) {
        session[propertyName] = propertyValue;
        self.updateSession(session, callback);
    }};

因?yàn)檎麄€(gè)過(guò)程中有更多的代碼(比如初始化模塊,在客戶機(jī)和服務(wù)器端使用套接字和REST調(diào)用),所以我不會(huì)在這里粘貼所有的代碼,您可以在GitHub上查看它,您可以使用它做任何事。


查看完整回答
反對(duì) 回復(fù) 2019-07-15
  • 3 回答
  • 0 關(guān)注
  • 639 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)