gpt4 book ai didi

javascript - node.js/socket.io,cookie 只在本地工作

转载 作者:IT王子 更新时间:2023-10-29 05:57:00 25 4
gpt4 key购买 nike

我正在尝试使用基于 cookie 的 session ,但它只能在本地计算机上运行,​​不能通过网络运行。如果我删除与 session 相关的内容,它将在网络上正常工作......

你必须原谅这里缺乏高质量的代码,我只是从 Node/套接字等开始,要找到任何清晰的指南是很困难的,所以我现在处于 n00b 领域。到目前为止,基本上这是从各种片段中拼凑而成的,对我实际在做什么有大约 10% 的理解......

我在 Chrome 中看到的错误是:

socket.io.js:1632GET http://192.168.0.6:8080/socket.io/1/?t=1334431940273 500 (Internal Server Error)

Socket.handshake ------- socket.io.js:1632

Socket.connect ------- socket.io.js:1671

Socket ------- socket.io.js:1530

io.connect ------- socket.io.js:91

(anonymous function) ------- /socket-test/:9

jQuery.extend.ready ------- jquery.js:438

在我看到的服务器控制台中:

debug - served static content /socket.io.js

debug - authorized

warn - handshake error No cookie

我的服务器是:

var express = require('express')
, app = express.createServer()
, io = require('socket.io').listen(app)
, connect = require('express/node_modules/connect')
, parseCookie = connect.utils.parseCookie
, RedisStore = require('connect-redis')(express)
, sessionStore = new RedisStore();

app.listen(8080, '192.168.0.6');

app.configure(function()
{
app.use(express.cookieParser());

app.use(express.session(
{
secret: 'YOURSOOPERSEKRITKEY',
store: sessionStore
}));
});

io.configure(function()
{
io.set('authorization', function(data, callback)
{
if(data.headers.cookie)
{
var cookie = parseCookie(data.headers.cookie);

sessionStore.get(cookie['connect.sid'], function(err, session)
{
if(err || !session)
{
callback('Error', false);
}
else
{
data.session = session;
callback(null, true);
}
});
}
else
{
callback('No cookie', false);
}
});
});

var users_count = 0;

io.sockets.on('connection', function (socket)
{
console.log('New Connection');

var session = socket.handshake.session;

++users_count;

io.sockets.emit('users_count', users_count);

socket.on('something', function(data)
{
io.sockets.emit('doing_something', data['data']);
});


socket.on('disconnect', function()
{
--users_count;

io.sockets.emit('users_count', users_count);
});

});

我的页面 JS 是:

jQuery(function($){

var socket = io.connect('http://192.168.0.6', { port: 8080 } );

socket.on('users_count', function(data)
{
$('#client_count').text(data);
});

socket.on('doing_something', function(data)
{
if(data == '')
{
window.setTimeout(function()
{
$('#target').text(data);
}, 3000);
}
else
{
$('#target').text(data);
}
});

$('#textbox').keydown(function()
{
socket.emit('something', { data: 'typing' });
});

$('#textbox').keyup(function()
{
socket.emit('something', { data: '' });
});

});

最佳答案

检查您的系统时钟,如果服务器和客户端的时钟不同,cookie 可能会在您设置后立即过期。

关于javascript - node.js/socket.io,cookie 只在本地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10156726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com