[英]socket.io doesn't store session
我有使用node.js和socket.io的應用程序。
我想在會話中存儲一些信息。 我做了個例子。 但我的代碼不起作用。 當我運行腳本並刷新頁面時,我看到:
NaN
2
接下來,當我再次刷新頁面時,我可以看到
NaN
2
NaN
2
因此,不存儲會話。 我該如何修復我的代碼?
var Session = require('express-session'),
SessionStore = require('session-file-store')(Session);
var session = Session({ secret: 'pass', resave: true, saveUninitialized: true });
var config = require("./config.json");
var express = require('express');
var app = express();
var socketio = require('socket.io');
var server = app.listen(3000, function(){
console.log('Start')
});
var io = require('socket.io').listen(server);
app.use(session); // session support
app.get('/', function (req, res) {
req.session.ziom = 1;
req.session.save();
console.log('dec');
});
var http = require('http');
var ios = require('socket.io-express-session');
io.use(ios(session));
io.sockets.on('connection', function(socket){
console.log(parseInt(socket.handshake.session.test));
socket.handshake.session.test =2;
socket.handshake.session.save();
console.log(parseInt(socket.handshake.session.test));
});
我不明白這個錯誤,因為我復制過你的代碼,一切*工作正常!
*我看不到你的所有代碼/項目,我不知道你是否有一個index.html
文件與節點服務器一起啟動connexion事件。 我有這個文件,其中包含最少的測試代碼。
我的app.js中的更改是res.sendfile('./index.html');
請參閱下面的所有代碼進行比較。
app.js
var Session = require('express-session'),
SessionStore = require('session-file-store')(Session);
var session = Session({ secret: 'pass', resave: true, saveUninitialized: true });
var express = require('express');
var app = express();
var socketio = require('socket.io');
var server = app.listen(3000, function(){
console.log('Start')
});
var io = require('socket.io').listen(server);
app.use(session); // session support
app.get('/', function (req, res) {
req.session.ziom = 1;
req.session.save();
console.log('dec');
res.sendfile('./index.html');
});
var http = require('http');
var ios = require('socket.io-express-session');
io.use(ios(session));
io.sockets.on('connection', function(socket){
console.log(parseInt(socket.handshake.session.test));
socket.handshake.session.test =2;
socket.handshake.session.save();
console.log(parseInt(socket.handshake.session.test));
});
的index.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<script>
var socket = io();
</script>
</body>
</html>
真誠希望有所幫助。
我假設你正在嘗試使用類似於教程中的bootstrap文件的HTML文件打開socket.io連接(此鏈接后的第二個html片段) ?
只需稍作修改,您的代碼就可以為我工作,工作就意味着您可以獲得
NaN
2
2
2
在控制台上有兩個頁面刷新。
為了得到這個,我在views/socket.html
創建了相對於index.js
文件(上面代碼的副本)的boostrap文件,並確保這是由Express應用程序通過將這些行添加到處理程序來提供的路線:
require('fs').readFile('views/socket.html', function (err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data, "utf8");
res.end();
});
然后兩次訪問http://localhost:3000
。
此文件需要由Express應用程序提供,以便存儲會話cookie; 這樣socket.io連接就知道在下次刷新時使用相同的cookie鏈接到同一個會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.