[英]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/foobar或http://dev.nodetest.com:8080/anotherfoobar 。 該URL無需指向現有文件。 端口8080上的任何URL都將調用中間件。 但是SOCKET.IO的請求永遠不會觸發您的測試中間件。
編輯有些庫可以幫助您處理socket.io中的會話。 sessio.socket.io似乎適合您的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.