日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言socket鉴权,建立套接字后进行socket.io身份验证

發(fā)布時(shí)間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言socket鉴权,建立套接字后进行socket.io身份验证 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

小編典典

這實(shí)際上并不難,但是您正以錯(cuò)誤的方式進(jìn)行處理。幾件事:

您不能使用socket.io 設(shè)置 cookie;但是,您可以隨時(shí)獲取任何已連接客戶(hù)端的cookie值。為了設(shè)置cookie,您將必須發(fā)送一個(gè)新的http響應(yīng),這意味著用戶(hù)必須先發(fā)送一個(gè)新的http請(qǐng)求(又名刷新或轉(zhuǎn)到新頁(yè)面,這聽(tīng)起來(lái)對(duì)您而言不可能)。

是的:socket.io是安全的(只要可以傳輸任何數(shù)據(jù)即可)。

因此,您可以執(zhí)行以下操作:

在用戶(hù)的初始連接上,創(chuàng)建具有唯一會(huì)話ID的cookie,例如從Express的會(huì)話中間件生成的cookie。但是,您將需要配置它們,使其在會(huì)話結(jié)束時(shí)不過(guò)期(否則,它們將在關(guān)閉瀏覽器后立即過(guò)期)。

接下來(lái),您應(yīng)該創(chuàng)建一個(gè)對(duì)象來(lái)存儲(chǔ)cookie會(huì)話ID。每次設(shè)置新的connect.sid

cookie時(shí),都將其默認(rèn)值存儲(chǔ)在新對(duì)象中(這意味著該用戶(hù)已通過(guò)會(huì)話而非登錄進(jìn)行了身份驗(yàn)證)

在用戶(hù)的登錄名上,向服務(wù)器發(fā)送套接字發(fā)出消息,然后您可以在其中驗(yàn)證登錄憑據(jù),然后更新您創(chuàng)建的會(huì)話ID對(duì)象,以使當(dāng)前套接字ID讀為true(登錄)。

現(xiàn)在,當(dāng)接收到新的http請(qǐng)求時(shí),讀取cookie.sid,并檢查其在對(duì)象中的值是否為true。

它看起來(lái)應(yīng)該如下所示:

var express = require('express'),

http = require('http'),

cookie = require('cookie');

var app = express();

var server = http.createServer(app);

var io = require('socket.io').listen(server);

app.use(express.cookieParser());

app.use(express.session({

secret: 'secret_pw',

store: sessionStore,

cookie: {

secure: true,

expires: new Date(Date.now() + 60 * 1000), //setting cookie to not expire on session end

maxAge: 60 * 1000,

key: 'connect.sid'

}

}));

var sessionobj = {}; //This is important; it will contain your connect.sid IDs.

//io.set('authorization'...etc. here to authorize socket connection and ensure legitimacy

app.get("/*", function(req, res, next){

if(sessionobj[req.cookies['connect.sid']]){

if(sessionobj[req.cookies['connect.sid']].login == true){

//Authenticated AND Logged in

}

else{

//authenticated but not logged in

}

}

else{

//not authenticated

}

});

io.sockets.on('connection', function(socket){

sessionobj[cookie.parse(socket.handshake.headers.cookie)['connect.sid'].login = false;

sessionobj[cookie.parse(socket.handshake.headers.cookie)['connect.sid'].socketid = socket.id;

socket.on('login', function(data){

//DB Call, where you authenticate login

//on callback (if login is successful):

sessionobj[cookie.parse(socket.handshake.headers.cookie)['connect.sid']] = true;

});

socket.on('disconnect', function(data){

//any cleanup actions you may want

});

});

2020-07-07

總結(jié)

以上是生活随笔為你收集整理的c语言socket鉴权,建立套接字后进行socket.io身份验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。