相关疑难解决方法(0)

Socket.IO身份验证

我试图在Node.js中使用Socket.IO,并试图让服务器为每个Socket.IO客户端提供一个标识.由于套接字代码超出了http服务器代码的范围,因此它无法轻松访问发送的请求信息,因此我假设它需要在连接期间发送.什么是最好的方法

1)通过Socket.IO获取有关谁连接的信息

2)验证他们说自己是谁(我目前正在使用Express,如果这让事情变得更容易)

authentication node.js express socket.io

115
推荐指数
4
解决办法
6万
查看次数

如何与Socket.IO 1.x和Express 4.x共享会话?

如何与Socket.io 1.0和Express 4.x共享会话?我使用Redis商店,但我认为这无关紧要.我知道我必须使用中间件来查看cookie和获取会话,但不知道如何.我搜索但找不到任何工作

    var RedisStore = connectRedis(expressSession);
    var session = expressSession({
        store: new RedisStore({
            client: redisClient
        }),
        secret: mysecret,
        saveUninitialized: true,
        resave: true
    });
    app.use(session);

    io.use(function(socket, next) {
        var handshake = socket.handshake;
        if (handshake.headers.cookie) {
            var str = handshake.headers.cookie;
            next();
        } else {
            next(new Error('Missing Cookies'));
        }
    });
Run Code Online (Sandbox Code Playgroud)

session node.js express socket.io

82
推荐指数
3
解决办法
4万
查看次数

在socket.io中管理多个选项卡(但相同的用户)

我有一些socket.io的问题,我不知道如何解决它.我有一个带有socket.io的登录系统的应用程序来管理用户交互.我还有一个数组来管理所有活动的websocket会话.此数组存储一对session.id => username.

当用户打开具有相同页面的新选项卡(或使用websocket的不同页面)时,问题就开始了.这会导致数组中的用户名条目重复.

{id1, username}
{id2, username}
Run Code Online (Sandbox Code Playgroud)

当套接字向用户发送消息时,它仅发送到该阵列的第一个会话ID,因此只有一个选项卡接收该消息.

我试图更改新连接的套接字ID以匹配另一个,但它不起作用.

socket.id = sessionId of the other websocket;
Run Code Online (Sandbox Code Playgroud)

我认为另一种解决方案是将消息发送到所有打开的会话,但我认为这不是最好的方法.

谢谢.

javascript session node.js socket.io

20
推荐指数
1
解决办法
2万
查看次数

由于connect不再使用parseCookie方法,我们如何使用express获取会话数据?

在node.js和express中,有很多示例显示如何获取会话数据.

正如您在访问第3个链接时所看到的,它是指向StackOverflow的链接.有一个很好的答案,但正如@UpTheCreek在那些评论中指出的那样,connect不再具有parseCookie方法.我也遇到过这个问题.我发现的所有教程都使用connect的parseCookie方法,现在这个方法不存在.所以我问他如何获取会话数据,他说他不知道最好的方法,所以我想我会在这里发布问题.使用express@3.0.0rc4时socket.io,和redis,我们如何获取会话数据并使用它来授权用户?我已经能够使用require('connect').utils.parseSignedCookie;,但是当我这样做时,我总是在握手时收到警告/错误,

warn - handshake error Error
Run Code Online (Sandbox Code Playgroud)

从我所读到的内容来看,听起来这并不是永久的解决方案.


UPDATE

好的,我session.socket.io在我的服务器上工作了.正如我所怀疑的那样,我在授权时陷入困境.我想我可能会以错误的方式解决这个问题,所以请随意纠正我.在我的Redis数据库中,我将获得用户的信息.他们第一次登录时,我想更新他们的cookie,以便它包含他们的用户信息.然后,当他们下次回到网站时,我想检查他们是否有cookie以及用户信息是否存在.如果它不存在,我想将它们发送到登录屏幕.在登录屏幕上,当用户提交信息时,它将针对Redis数据库测试该信息,如果匹配,它将使用用户信息更新cookie.我的问题是这些:

1)如何通过RedisStore更新/更改cookie?

2)看起来会话数据仅保存在cookie中.如果有人关闭了cookie,我如何在页面之间跟踪用户信息?

这是我的适用代码:

//...hiding unapplicable code...
var redis = require('socket.io/node_modules/redis');
var client = redis.createClient();
var RedisStore = require('connect-redis')(express);
var redis_store = new RedisStore();
var cookieParser = express.cookieParser('secret');

app.configure(function(){
  //...hiding unapplicable code...
  app.use(cookieParser);
  app.use(express.session({secret: 'secret', store: redis_store}));
});

//...hiding code that starts the server and socket.io

var SessionSockets = require('session.socket.io');
var ssockets = new …
Run Code Online (Sandbox Code Playgroud)

authentication session node.js express socket.io

13
推荐指数
2
解决办法
5372
查看次数

节点socket.io,什么防止洪水?

我怎样才能阻止某人干脆做

while(true){client.emit('i am spammer', true)};
Run Code Online (Sandbox Code Playgroud)

当有人有崩溃我的节点服务器的冲动时,这确实是一个问题!

在此输入图像描述

node.js socket.io

8
推荐指数
1
解决办法
5131
查看次数

使用Express和Socket.IO解释会话支持?

我正在寻找一些帮助,找出依赖于express和socket.io的服务器上的会话.大多数情况下,目标是处理诸如将socket.io会话id与用户id配对,在重新连接时维护状态以及能够轻松地对服务器上的任何actor进行分组等事情.

很感谢任何形式的帮助.

谢谢.

javascript session node.js express socket.io

7
推荐指数
1
解决办法
3917
查看次数

防止浏览器卡在AJAX请求上

我正在尝试在用户关闭页面时发送请求.我正在使用这个onbeforeunload活动.

选项卡关闭或页面刷新时会触发事件.我的活动如下:

window.onbeforeunload = function () {
    $.ajax({ //jQuery
        type: "POST",
        url: "offline.php",
        data: {
            logout: 'false'
        }
    });
}; 
Run Code Online (Sandbox Code Playgroud)

offline.php(这不是完整的脚本):

...
unset($_SESSION["onpage"];
if ($_POST['logout'] == "false") {
    sleep(3);
    if (isset($_SESSION["onpage"]) || !empty($_SESSION["onpage"])) die();
}
...
Run Code Online (Sandbox Code Playgroud)

当用户关闭页面时,脚本会取消设置在聊天页面上的会话.三秒钟后,脚本应检查用户是否已返回但是检查onpage会话.但是,当我按下刷新按钮时会出现问题.刷新时,页面无法加载,因为三秒钟已完成.这导致我的整个系统被破坏.

我试过添加,ignore_user_abort(true);但它没有解决我的问题.有没有其他办法让这个工作?

旁注:这是聊天.当用户关闭页面时,它应该通过"用户已离开"消息通知聊天中的其他用户.这不应该在刷新时显示.当用户返回该页面时,它应该通知用户已经返回"用户已输入"消息的其他用户.

聊

javascript php ajax jquery

3
推荐指数
1
解决办法
1098
查看次数

使用socket.io时,express-session不设置会话cookie

我正在尝试使用socket.io实现身份验证和会话.

经过大量的研究1,我设置了以下使用快速和快速会话.

问题是,express和socket.io连接似乎有不同的会话,因为id我得到的是不同的.

此外,浏览器中没有从我的应用程序中设置cookie(这可能是两个组件创建不同会话的原因?)

我正在使用express 4.13.3express-session 1.12.1和socket.io 1.3.7.

下面是我设置的服务器端代码:

var app = require('express')();
var server = app.listen(80);
var parser = require('body-parser');
var Session = require('express-session');
var io = require('socket.io')(server);
var game = require('./game.js');
var session = Session({
  secret: 'some secret',
  resave: false,
  saveUninitialized: false,
  cookie: {
    'name': 'test',
    httpOnly: false,
    secure: false,
    maxAge: ((60 * 1000) * 60)
  }
});
app.use(parser.urlencoded({
  extended: false
}));
app.use(session);
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, …
Run Code Online (Sandbox Code Playgroud)

cookies node.js express socket.io express-session

1
推荐指数
1
解决办法
3704
查看次数