将客户端套接字连接到Cookie

3

我正在制作一个聊天程序。

我正在使用 Nginx 服务器和 NodeJS。

我已经通过 SSL 设置了 WebSocket 并且运行良好。

我决定使用 Cookies 进行身份验证。

有两个非常关键的函数:

mconnection.prototype.make_server_https=function(){
console.log('Make server https');

var cthis=this;
var server_https=modules.https.createServer({
    key: this.ssl_key,
    cert:this.ssl_cert,
    ca:this.ssl_ca
    },(request,response)=>{
        console.log('### CreateServer ###');

        console.log('CreateServer, Request:');
        console.log(request);

        console.log('CreateServer, Response:');
        console.log(response);

        console.log('######');

并且

mconnection.prototype.make_server_websocket=function(){
var server_websocket=new modules.ws.Server({server:this.server_https});

var cookie = require("cookie");

var cthis=this;
//whenever a new client connects with the server.
server_websocket.on('connection', function(client_socket, request){
    console.log('### On Connection ###');

    console.log('OnConnection, Client Socket:');
    console.log(client_socket);
    console.log('OnConnection, Request:');
    console.log(request);

    console.log('######');

如果我在客户端URL中指定端口号,函数“make_server_https”被执行,在其中可以通过响应对象访问cookie并设置它。
但在原始URL中,函数“make_server_websocket”被执行,在那里我可以访问服务器上的客户端套接字,但似乎无法访问cookie。
我需要使用client_websocket来启动与该给定客户端的连接。我需要以某种方式将其与cookie登录信息联系起来。
但我从未同时拥有两者,因此不知道如何将它们连接起来以进行登录。
我可能有所误解,非常感谢您提供任何帮助。

当URL没有端口号时,请求对象中永远不会有cookie。我正在使用HttpOnly。 - john-jones
在onconnection函数中,我认为我无法设置cookie,因为我没有响应对象。而在make_server_https中,我无法建立连接,因为我没有客户端套接字对象。它完全不起作用。 - john-jones
就像我在设置cookie,但仅当URL中指定了自定义端口号时。 - john-jones
我明白了。这是一个名为“on headers”的事件,而不是“on connection”。在那里,我可以直接将内容推送到头部。 - john-jones
请问如果我的答案对您有帮助并且您喜欢的话,能否给我提供奖励?谢谢! - Chandan
显示剩余4条评论
2个回答

1
你需要使用GET从node服务器提供索引页面,当请求到达后端时,将有响应对象可用于SET-COOKIE(如果未从后端设置)。完成GET请求后,COOKIE将被添加到浏览器中,当下一次请求websocket连接时,浏览器将在REQUEST HEADERS中添加COOKIE,后端可以通过请求对象访问它。如果您决定在登录系统中使用它,则可以在成功登录时SET-COOKIE

0
我明白了,这是一个名为“on headers”的事件,而不是“on connection”事件。在那里,我可以轻松地将内容推送到headers中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接