
Итак, вам понадобилось получить сгенерированный при конструировании вебсокета идентификатор сессии. Неспешное гугление выдало такое обсуждение:
stackoverflow.com. Однако,
socket.sessionId оказывается undefined (версия SockJS 0.3.4). Но не всё потеряно.
Способ достать идентификатор есть - регулярные выражения, он написан в обсуждении на stackoverflow:
var url = socket._transport.url; // "http://localhost:8080/user/482/0bb13347/websocket"
var result = url.match(/.*\/([^\/]*)\/websocket$/);
alert(result[1]); //sessionid |
var url = socket._transport.url; // "http://localhost:8080/user/482/0bb13347/websocket"
var result = url.match(/.*\/([^\/]*)\/websocket$/);
alert(result[1]); //sessionid
Как оказывается, нет способа передать в конструктор параметр с желаемым значением идентификатора сессии. А если надо получить для совместимости в идентификаторе не строку из 8 случайных символов, а uuid? Насколько я понял, ванильный
SockJS уже не сработает.
Обследуем исходник
sockjs-0.3.4.js. В функции
SockJS.prototype._try_next_protocol = function(close_event) {} есть единственное упоминание переменной
$connid, которая становится частью URL, эта переменная не покидает области видимости этой функции. Если бы в коде был оператор:
, то можно было бы достать идентификатор как
socket.sessionId.
Для того, чтобы присвоить идентификатору сессии случайный uid, потребуется такой патч (добавлены функции
guid() и
s4()):
+function guid() {
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
+ s4() + '-' + s4() + s4() + s4();
+ }
+
+function s4() {
+ return Math.floor((1 + Math.random()) * 0x10000)
+ .toString(16)
+ .substring(1);
+}
that._didClose(2007, "Transport timeouted");
}
});
- var connid = utils.random_string(8);
+ var connid = guid();
var trans_url = that._base_url + '/' + that._server + '/' + connid;
that._debug('Opening transport:', protocol, ' url:'+trans_url,
' RTO:'+that._options.rto);
+ that.sessionId = connid; |
+function guid() {
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
+ s4() + '-' + s4() + s4() + s4();
+ }
+
+function s4() {
+ return Math.floor((1 + Math.random()) * 0x10000)
+ .toString(16)
+ .substring(1);
+}
that._didClose(2007, "Transport timeouted");
}
});
- var connid = utils.random_string(8);
+ var connid = guid();
var trans_url = that._base_url + '/' + that._server + '/' + connid;
that._debug('Opening transport:', protocol, ' url:'+trans_url,
' RTO:'+that._options.rto);
+ that.sessionId = connid;