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

时间:2015-06-04 10:31:53

标签: javascript node.js session express socket.io

我有一个小型快递应用程序,它还包含套接字程序。当用户成功登录时,它会完美地创建会话和套接字连接。

但我的问题是当快递会话到期或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 个答案:

答案 0 :(得分:0)

也许你可以在发出消息之前检查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://stackoverflow.com/a/5560187/3928819