Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Samstag, 8. Juni 2013, 20:24

NodeJS Sessions

Hallo,

ich habe eine Kleine Frage, wie gehen überhaupt Sessions in node.js mit websockets? Wird diese authorization jedes mal aufgerufen bei jeden request oder nur ein einziges mal?

Javascript Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
io.set('authorization', function (handshakeData, accept) {
	console.log('begin handshake');
	console.log(handshakeData);
	if (handshakeData.headers.cookie) {
		// if there is, parse the cookie
		handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
                console.log(connect.utils.parseSignedCookie);
		// the cookie value should be signed using the secret configured above (see line 17).
		// use the secret to to decrypt the actual session id.
		handshakeData.sessionID = connect.utils.parseSignedCookie(handshakeData.cookie[config.session.key], config.session.secret);
                console.log(handshakeData.sessionID);
		// if the session id matches the original value of the cookie, this means that
		// we failed to decrypt the value, and therefore it is a fake. 
		if (handshakeData.cookie[config.session.key] == handshakeData.sessionID) {
			// reject the handshake
			console.log('handshake error');
			return accept('Cookie is invalid.', false);
		}
    } else {
       // if there isn't, turn down the connection with a message
       // and leave the function.
       console.log('handshake error');
       return accept('No cookie transmitted.', false);
    }
 
    // accept the incoming connection
    console.log('handshake success');
    accept(null, true);
});


Und wie kann ich dann darauf zugreifen?

Javascript Quellcode

1
2
3
socket.on('addMessage', function (data) {
	io.sockets.emit('new', data);
});


Die SID lasse ich von PHP Script generieren, das ich dann in einer mysqldb Speicher. Da die ForenCookies ja leider HTTP Only sind.

Die Dokumentation sind zu jeder node.js/socket.io anders.

Danke euer DK

2

Freitag, 12. Juli 2013, 22:33

Mit dieser Funktion von Socket.io kenne ich mich leider auch nicht aus, aber zur Not könntest du alternativ einfach was anderes machen: Lies deine SessionID einfach im clientseitigen JS aus dem Cookie aus und schick sie nach Etablierung der Verbindung selbst durch die Leitung. Dann musst du zwar deine Applikation so bauen, dass sie das handhaben kann, aber du gehst auf Nummer sicher und bist nicht vor wüst dokumentierter Funktionalität abhängig. Die widersprüchliche Doku deutet auch darauf hin, dass dieses ganze Feature vielleicht auch nicht sonderlich stabil ist und sich häufig ändert :-/

Revito

Rekrut

Motto: Verschwendet ist das Leben viel zu kurz.

  • Nachricht senden

3

Freitag, 8. November 2013, 14:21

Der Handshake wird nur beim Verbindungsaufbau ausgeführt.
Die Variable handshakeData beinhaltet dabei den Inhalt des HTTP-Requests vom Browser an den Server.
Existiert ein Cookie, wird er extrahiert und entschlüsselt.
Anschließend wird die verschlüsselte SID mit der unverschlüsselten SID verglichen.
Sind beide gleich, konnte die SID nicht entschlüsselt werden und der Server weist die Verbindung zurück.

Ist alles glattgelaufen können Browser und Server ganz normal miteinander kommunizieren.

Hier hab ich auch noch mal eine Internetseite die alles erklärt:
Session-based Authorization with Socket.IO - How To Node - NodeJS

Da wird dann auch gleich erklärt wie du mit einer Middleware von Connect eine SessionID generierst.
Enslaved - Von Sklaverei und Freiheit

Social Bookmarks