Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get session id on the client side? (WebSocket)

Is there any way to do this?

Client side:

function connectWebSocket() {
    var socket = new SockJS('/socket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        console.log("connected");
    });
}

Server side is not important. After the code above has been executed I need to know my session id.

like image 471
sinedsem Avatar asked Jan 18 '15 12:01

sinedsem


3 Answers

You can get it from url without making any changes into SockJS library.

var socket = new SockJS('/mqClient');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
        console.log(socket._transport.url); 
        //it contains ws://localhost:8080/mqClient/039/byxby3jv/websocket
        //sessionId is byxby3jv
    });
like image 68
mariusz2108 Avatar answered Sep 16 '22 14:09

mariusz2108


The SockJS constructor has an option parameter and there you can pass a custom session id generator as a function:

let sessionId = utils.random_string(8);
let socket = new SockJS('/socket', [], {
    sessionId: () => {
       return sessionId
    }
 });
like image 29
tandris Avatar answered Sep 17 '22 14:09

tandris


To get session id we need to make some changes into SockJS library.
The string

var connid = utils.random_string(8);

is used to get our id. So, we need only complete it like this:

var connid = utils.random_string(8);
that.sessionId = connid;

and then we can read this field from the client code:

function connectWebSocket() {
    var socket = new SockJS('/socket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        console.log("connected, session id: " + socket.sessionId);
    });
}

And if we need to know session id before calling connect method we can modify SockJS' constructor and connect method to use client-passed value.

like image 34
sinedsem Avatar answered Sep 18 '22 14:09

sinedsem