如何在会话过期时断开套接字

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

【讨论】:

以上是关于如何在会话过期时断开套接字的主要内容,如果未能解决你的问题,请参考以下文章

导航到不同屏幕时如何断开套接字

套接字断开连接时如何更改特定用户的状态?

在 Android 中,如何断开套接字?

套接字 IO:如何定义断开连接的套接字 id(当多个选项卡时)?

Perl-我如何知道套接字客户端何时断开连接(当用户关闭窗口/浏览器时)

客户端断开连接时套接字服务器崩溃