2015-06-04 2 views
0

У меня есть небольшое экспресс-приложение, которое также содержит программу сокетов. Когда когда-либо пользовательский вход в систему успешно запускает сеансовое и сокетное соединение.Как отключить сокет при истечении сеанса

Но моя проблема заключалась в том, что экспресс-сессия истекает или сеанс удаляется менеджером 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); 

Спасибо.

ответ

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

Смежные вопросы