2009-11-16 9 views
24

Poiché HTTP è un protocollo stateless, quando un client effettua un numero di richieste al server, in che modo il server identifica in modo univoco le richieste di un particolare cliente in un periodo di tempo, dice t1, t2, t3 ..Tracciamento sessione HTTP

Ho navigato sul Web e ho trovato termini come ID sessione, riscrittura URL e cookie. Ma sarebbe bello se qualcuno lo spiegasse in un modo migliore. In particolare quale parte della richiesta e risposta HTTP verrebbe utilizzata per il tracciamento della sessione?

risposta

38

Come già accennato, i metodi più comuni per implementare il tracciamento della sessione HTTP includono la riscrittura degli URL e i cookie. Il tracciamento della sessione richiede fondamentalmente che un ID di sessione venga mantenuto su più richieste al server. Ciò significa che ogni volta che un determinato client effettua una richiesta al server, passa lo stesso ID di sessione. Il server può utilizzare questo ID per cercare le informazioni sulla sessione che gestisce.

Quando si utilizzano i cookie, il server chiede al client di memorizzare un cookie impostando l'intestazione della risposta HTTP Set-Cookie. Questo cookie contiene l'ID di sessione univoco assegnato a quel cliente - in questo esempio la stringa 'ABAD1D':

Set-Cookie: JSESSIONID=ABAD1D;path=/ 

il cookie viene poi inviato al server da parte del client utilizzando la richiesta di intestazione Cookie HTTP su ogni richiesta e quindi il server è informato su ogni richiesta dell'ID di sessione attualmente assegnato al client.

Cookie: JSESSIONID=ABAD1D 

Quando si utilizza la riscrittura dell'URL, questo stesso ID di sessione viene invece inviato da qualche parte nell'URL. Anche in questo caso, il server estrae l'ID di sessione dall'URL in modo che possa occhiata la sessione per un particolare client:

http://my.app.com/index.jsp;JSESSIONID=ABAD1D 

Tuttavia, il server deve anche fare in modo che tutti gli URL delle pagine web inviate al client vengono riscritti anche per contenere quel particolare ID di sessione dei client. Poiché l'ID della sessione è codificato negli URL, questo metodo di tracciamento della sessione è trasparente per il browser. Spesso un server ricorre alla riscrittura degli URL se trova che non è in grado di impostare un cookie di sessione sul client, il che implica che il client non supporta/accetta i cookie.

Si noti che le sessioni possono scadere. Ciò significa che se il server non "vede" un dato ID di sessione per un periodo di tempo, può rimuovere i dati della sessione per conservare le risorse.

+0

Grazie per le informazioni .. :) – dexter

+2

@RickNZ non perdere la fiducia in SO - Non ho copiato la tua risposta. Se controlli le mie revisioni vedrai che ho iniziato spiegando le sessioni HTTP. Ho quindi dedicato un po 'di tempo a controllare i formati di esempio di JSESSIONID sia in cookie che in URL e a confermare i nomi delle intestazioni HTTP. Ho poi aggiunto questi al mio post quando ero sicuro che fossero corretti. Non è sorprendente che domande come questa porteranno a risposte simili ma se ti senti ancora lesa voterò volentieri per cancellare la mia risposta. – teabot

+1

@teabot: nessun problema; Va tutto bene. – RickNZ

2

Il monitoraggio della sessione è una cosa lato server.

Un server Web emette un identificatore di sessione che viene restituito al browser. Il browser invia questo identificatore di sessione insieme a ciascuna richiesta.

Questo è probabilmente fatto utilizzando i cookie in modo trasparente per l'utente.

1

la gestione della sessione viene gestita nella maggior parte dei casi inviando un cookie al client. quel cookie sarebbe stato rispedito al server ad ogni richiesta da quel particolare client.

Il session id sarà associato con alcune risorse sul lato server (file, spazio ram) in modo che il server leggendo il session id nel cookie possa trovare questa risorsa e quindi sapere quale client è stato.

9

particolare quale parte del HTTP richiesta e la risposta potrebbe essere utilizzato per il monitoraggio sessione?

Nella risposta HTTP, il server può impostare un cookie. Lo fa con l'intestazione Set-Cookie. Per esempio:

Set-Cookie: session=12345; path=/ 

Il cliente quindi restituisce il valore di tutti i cookie che corrispondono alle proprietà che sono stati fissati con il cookie, che possono includere percorso (come sopra) e il dominio, e che non sono ancora scaduti.

Il cookie viene rinviato al server come parte delle intestazioni HTTP. Ad esempio:

Cookie: session=12345 

Nessuna delle informazioni sulla proprietà originale viene restituita con il cookie.

Un cookie univoco consente al server di associare una chiave univoca a una particolare istanza del browser. Il server può quindi utilizzare quella chiave come indice in una tabella hash o in una tabella di database che contiene informazioni di stato per utente esclusive.

+0

che è stato davvero utile. thanx .. – dexter

0

trovare abbastanza dettagli here

sessioni HTTP sono l'approccio consigliato. Una sessione identifica le richieste che provengono dallo stesso browser durante il periodo di conversazione. Tutti i servlet possono condividere la stessa sessione. JSESSIONID è generato dal server e può essere trasferito al client tramite cookie, riscrittura dell'URL (se i cookie sono disattivati) o meccanismo SSL incorporato. Bisogna fare attenzione a ridurre al minimo la dimensione degli oggetti archiviati in sessione e gli oggetti archiviati in sessione dovrebbero essere serializzabili. In un servlet Java la sessione può essere ottenuta come segue:

HttpSession session = request.getSession(); // restituisce la sessione corrente o una nuova sessione

Le sessioni possono essere scadute (configurate in web.xml) o invalidate manualmente.