繁体   English   中英

节点JS Express端口

[英]Node JS Express Ports

我正在使用redis将会话cookie从PHP发送到Node / Express。 我似乎能够访问server.js代码中的cookie的唯一方法是,如果我在客户端上创建了一个空文件并将其包含在端口中,如下所示:

<script type="text/javascript" src="http://dev.nodetest.com:8080/empty.js"></script>

如果我不在客户端上包含此数据,则无法访问节点服务器上的cookie数据。

我的要求是,我不需要将cookie发送回客户端。 仅在server.js中访问它以针对数据库对用户进行身份验证。

这是我的server.js文件的内容:

var express = require('express'),
    http = require('http'),
    app = express(),
    server = http.createServer(app),
    io = require('socket.io').listen(8081),
    cookieParser = require('cookie-parser'),
    session = require('express-session'),
    RedisStore = require('connect-redis')(session);

app.use(cookieParser());

app.use(session({
    store: new RedisStore({
        // this is the default prefix used by redis-session-php
        prefix: 'session:php:'
    }),
    // use the default PHP session cookie name
    name: 'PHPSESSID',
    secret: 'node.js rules'
}));

app.use(function(req, res, next) {
    console.log(req.session);
    req.session.nodejs = 'Hello from node.js!';
    res.send();
});

io.sockets.on('connection', function (socket) {
    socket.on('subscribe', function(room) {
        console.log('joining room', room);
        socket.join(room);
    });
});

app.listen(8080);

您正在下面的快速中间件中打印会话信息:

app.use(function(req, res, next) {
    console.log(req.session);
    req.session.nodejs = 'Hello from node.js!';
    res.send();
});

仅当您发出普通的http请求(将其解释为快速请求)时才调用此中间件。 当您使用socket.io进行交易时,上述代码将永远不会执行(例如,连接套接字,发送消息,断开连接等)。

index.php生成一个cookie和一个页面,该页面包含一个连接到socket.io并向其发出消息的脚本。 当您这样做时,不会执行上述中间件。 但是,当您生成“正常请求”时,将执行上述中间件。 这就是为什么在脚本中包含Empty.js时执行中间件的原因:

<script type="text/javascript" src="http://dev.nodetest.com:8080/empty.js"></script>

实际上,这将针对任何请求执行,例如。 http://dev.nodetest.com:8080/foobarhttp://dev.nodetest.com:8080/anotherfoobar 该URL无需指向现有文件。 端口8080上的任何URL都将调用中间件。 但是SOCKET.IO的请求永远不会触发您的测试中间件。

编辑有些库可以帮助您处理socket.io中的会话。 sessio.socket.io似乎适合您的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM