【问题标题】:Get SESSIONID in nodeJS在 nodeJS 中获取 SESSIONID
【发布时间】:2013-04-10 05:29:35
【问题描述】:

现在,在玩了几个小时的 nodejs 和 socket.io 之后,我又遇到了几个问题 - 一个是,我需要在 node.js 中获取 sessionID,而无需使用 app.get('/' ... - 因为那当socket.io 连接时,事件似乎不会触发,它只会触发.on('connection', function( ...

var express = require('express')()
express.set('port', process.env.PORT || 8080)

var server = require('http').createServer(express)
var socket = require('socket.io').listen(server)

server.listen(express.get('port'))

// this event is fired, get('/', ... isnt!
server.on('connection', function(stream) {
    // ??
} )

会话最初是由 PHP 应用程序在用户登录时创建的。会话数据存储在数据库中,我需要访问该数据的关键是会话 ID。最简单的方法是什么?如前所述,我发现了几个使用 app.get('/' ... 的示例,但我根本无法触发该事件。

谢谢。

【问题讨论】:

    标签: node.js express socket.io sessionid


    【解决方案1】:

    如果会话数据被存储为 cookie(很可能),那么您应该能够在套接字握手期间重新解析该数据。我在this answer 上发布了代码,但也复制了这里的代码:

    io.configure(function () {
      io.set('authorization', function (handshakeData, callback) {
    
        var cookie = handshakeData.headers.cookie;
    
        // parse the cookie to get user data...
    
        // second argument to the callback decides whether to authorize the client
        callback(null, true);
      });
    });
    

    如果会话数据在 URL 中传播,那么您可以从 handshakeData.urlhandshakeData.query 收集此信息。您可能需要自己进行实验。

    【讨论】:

    • 嗯,我得到了标题信息(cookie 为空) - 但我似乎没有得到 Set-Cookie 数据,它显然不存在。如果我用萤火虫检查我的 Answer-Header,它会告诉我类似Set-Cookie PHPSESSID=...; path=/ 等的信息 - 但在握手数据中似乎缺少该信息。它不应该有相同的标题吗?也许我只是把整个 SESSION 概念弄错了
    • 啊!我找到了解决方案。您的想法似乎可行,我显然遇到的问题是基于 PHP 的(通过更改 session.cookie_domain,它似乎现在提供 PHPSESSID)非常感谢!
    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2013-05-30
    • 2010-11-25
    • 2011-05-19
    相关资源
    最近更新 更多