如何在会话过期时断开套接字
Posted
技术标签:
【中文标题】如何在会话过期时断开套接字【英文标题】:how to disconnect socket on session expire 【发布时间】:2015-08-18 22:12:15 【问题描述】:我有一个小型快速应用程序,它也包含套接字程序。当用户成功登录时,它会完美地创建会话和套接字连接。
但我的问题是当快速会话过期或 cookie 管理器删除会话时,套接字仍处于活动连接中。它接收消息。即使成功登录后会话不可用,如何断开连接。
我的代码是:
这是我收到警报消息的 html 文件:
<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
<script src="socket.io.js"></script>
<script>
$(document).ready(function()
$("button").click(function()
$.ajax(
type: 'GET',
contentType: 'application/json',
url: './alert'
);
);
</script>
<script>
var socket = io.connect();
socket.on('message',function(data)
alert(data.msg);
);
</script>
</head>
<body>
<button>alert</button>
</bodY>
</html>
这是我的套接字和快递代码:
var express=require('express');
var app=express();
var session = require('express-session');
var server=require('http').createServer(app);
app.use(session(secret: 'abcd',resave:'false', saveUninitialized:'false',name:'usess',cookie: maxAge: 10000 ));
var io=require('socket.io').listen(server);
io.sockets.on('connection', function (socket)
socket.join('alerts');
socket.on('disconnect',function(data)
socket.leave('alerts');
console.log('leaved');
);
);
app.get('/login', function(req, res)
//here my authentication code//
req.session.login='logedin';
req.session.save();
res.sendfile('./template.html');
);
app.get('/', auth,function(req, res)
//index file contins the two text boxes for user name and pass//
res.sendfile('./index.html');
);
app.get('/alert',function(req,res)
io.sockets.in('alerts').emit('message',msg:'hai');
res.end();
);
server.listen(3000);
谢谢。
【问题讨论】:
【参考方案1】:也许您可以在发出消息之前检查 req.session 是否存在?
app.get('/alert',function(req,res)
if(req.session)
io.sockets.in('sairam').emit('message',msg:'hai');
else
//Disconnect the client from server side
res.end();
);
要从服务器端断开套接字,请检查此答案;
https://***.com/a/5560187/3928819
【讨论】:
以上是关于如何在会话过期时断开套接字的主要内容,如果未能解决你的问题,请参考以下文章
套接字 IO:如何定义断开连接的套接字 id(当多个选项卡时)?