node.js / socket.io, файлы cookie работают только локально

Я пытаюсь использовать сеансы на основе файлов cookie, однако он будет работать только на локальном компьютере, а не на сеть. Если я уберу вещи, связанные с сеансом, он, тем не менее, будет отлично работать в сети...

Вам придется простить здесь отсутствие качественного кода, я только начинаю с узла/сокета и т. д. и т. д.,и найти какие-либо четкие руководства сложно, поэтому я сейчас на территории n00b. По сути, это пока собрано из различных фрагментов с примерно 10% пониманием того, что я на самом деле делаю...

Ошибка, которую я вижу в Chrome, это:

socket.io.js :1632GEThttp://192.168.0.6:8080/socket.io/1/?t=1334431940273500 (Внутренняя ошибка сервера)

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

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

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

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

(анонимная функция)-------/socket -test/ :9

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

И в консоли сервера я вижу:

debug -обслуживаемый статический контент /socket.io.js

debug -авторизованный

предупреждение -ошибка рукопожатия Нет куки

Мой сервер:

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: '' });
    });

});

7
задан BenOfTheNorth 14 April 2012 в 23:23
поделиться