Sessione (informatica) - Session (computer science)

In informatica e networking in particolare, una sessione è uno scambio di informazioni temporaneo e interattivo tra due o più dispositivi comunicanti, o tra un computer e un utente (vedi sessione di accesso ). Una sessione viene stabilita ad un certo punto nel tempo, e poi 'tagliata' - portata a termine - in un momento successivo. Una sessione di comunicazione stabilita può coinvolgere più di un messaggio in ciascuna direzione. Una sessione è tipicamente stateful , il che significa che almeno una delle parti comunicanti deve conservare le informazioni sullo stato corrente e salvare le informazioni sulla cronologia della sessione per poter comunicare, al contrario della comunicazione stateless , in cui la comunicazione consiste in richieste indipendenti con risposte.

Una sessione stabilita è il requisito di base per eseguire una comunicazione orientata alla connessione . Una sessione è anche il passaggio fondamentale per trasmettere in modalità di comunicazione senza connessione . Tuttavia, qualsiasi trasmissione unidirezionale non definisce una sessione.

Comunicazione Il trasporto può essere implementato come parte di protocolli e servizi a livello di applicazione , a livello di sessione oa livello di trasporto nel modello OSI .

Nel caso di protocolli di trasporto che non implementano un livello di sessione formale (ad es. UDP ) o in cui le sessioni a livello di applicazione sono generalmente di breve durata (ad es. HTTP), le sessioni vengono mantenute da un programma di livello superiore utilizzando un metodo definito nei dati scambiati. Ad esempio, uno scambio HTTP tra un browser e un host remoto può includere un cookie HTTP che identifica lo stato, come un ID di sessione univoco , informazioni sulle preferenze dell'utente o sul livello di autorizzazione.

Si pensava che HTTP/1.0 consentisse solo una singola richiesta e risposta durante una sessione Web/HTTP. La versione del protocollo HTTP/1.1 ha migliorato ciò completando la Common Gateway Interface (CGI), rendendo più semplice la manutenzione della sessione Web e supportando i cookie HTTP e il caricamento di file.

La maggior parte delle sessioni client-server è gestita dal livello di trasporto: una singola connessione per una singola sessione. Tuttavia, ogni fase di transazione di una sessione Web/HTTP crea una connessione separata. Il mantenimento della continuità della sessione tra le fasi richiede un ID di sessione . L' ID di sessione è incorporato nei collegamenti <A HREF> o <FORM> delle pagine Web dinamiche in modo che venga ritrasmesso al CGI. CGI utilizza quindi l' ID di sessione per garantire la continuità della sessione tra le fasi della transazione. Un vantaggio di una connessione per fase è che funziona bene su connessioni a bassa larghezza di banda (modem).

Implementazione del software

Le sessioni TCP sono in genere implementate nel software utilizzando processi figlio e/o multithreading , in cui viene creato un nuovo processo o thread quando il computer stabilisce o si unisce a una sessione. Le sessioni HTTP in genere non vengono implementate utilizzando un thread per sessione, ma tramite un database con informazioni sullo stato di ciascuna sessione. Il vantaggio con più processi o thread è la complessità rilassata del software, poiché ogni thread è un'istanza con una propria cronologia e variabili incapsulate. Lo svantaggio è un grande sovraccarico in termini di risorse di sistema e che la sessione può essere interrotta se il sistema viene riavviato.

Quando un client può connettersi a qualsiasi server in un cluster di server, si verifica un problema speciale nel mantenere la coerenza quando i server devono mantenere lo stato di sessione. Il client deve essere indirizzato allo stesso server per la durata della sessione oppure i server devono trasmettere informazioni sulla sessione lato server tramite un file system condiviso o un database. In caso contrario, il client potrebbe riconnettersi a un server diverso da quello con cui ha avviato la sessione, il che causerà problemi quando il nuovo server non avrà accesso allo stato memorizzato del vecchio.

Sessioni web lato server

Le sessioni lato server sono pratiche ed efficienti, ma possono diventare difficili da gestire in combinazione con sistemi di bilanciamento del carico/alta disponibilità e non sono affatto utilizzabili in alcuni sistemi embedded senza storage. Il problema del bilanciamento del carico può essere risolto utilizzando l'archiviazione condivisa o applicando il peering forzato tra ciascun client e un singolo server nel cluster, sebbene ciò possa compromettere l'efficienza del sistema e la distribuzione del carico.

Un metodo per utilizzare le sessioni lato server in sistemi senza archiviazione di massa consiste nel riservare una porzione di RAM per l'archiviazione dei dati di sessione. Questo metodo è applicabile ai server con un numero limitato di client (es. router o access point con accesso poco frequente o non consentito a più client contemporaneamente).

Sessioni web lato client

Le sessioni lato client utilizzano cookie e tecniche crittografiche per mantenere lo stato senza memorizzare tanti dati sul server. Quando si presenta una pagina Web dinamica, il server invia i dati sullo stato corrente al client (browser Web) sotto forma di cookie. Il client salva il cookie in memoria o su disco. Ad ogni richiesta successiva, il client invia il cookie al server e il server utilizza i dati per "ricordare" lo stato dell'applicazione per quel client specifico e generare una risposta appropriata.

Questo meccanismo può funzionare bene in alcuni contesti; tuttavia, i dati archiviati sul client sono vulnerabili alla manomissione da parte dell'utente o da parte di software che hanno accesso al computer client. Per utilizzare sessioni lato client in cui sono richieste riservatezza e integrità, è necessario garantire quanto segue:

  1. Riservatezza: niente a parte il server dovrebbe essere in grado di interpretare i dati della sessione.
  2. Integrità dei dati: niente a parte il server dovrebbe manipolare i dati della sessione (accidentalmente o intenzionalmente).
  3. Autenticità: niente a parte il server dovrebbe essere in grado di avviare sessioni valide.

Per fare ciò, il server deve crittografare i dati della sessione prima di inviarli al client e la modifica di tali informazioni da parte di terzi dovrebbe essere impedita tramite mezzi crittografici.

La trasmissione dello stato avanti e indietro con ogni richiesta è pratica solo quando la dimensione del cookie è piccola. In sostanza, le sessioni lato client scambiano lo spazio su disco del server per la larghezza di banda extra richiesta da ogni richiesta web. Inoltre, i browser web limitano il numero e la dimensione dei cookie che possono essere memorizzati da un sito web. Per migliorare l'efficienza e consentire più dati di sessione, il server può comprimere i dati prima di creare il cookie, decomprimendoli successivamente quando il cookie viene restituito dal client.

Token di sessione HTTP

Un token di sessione è un identificatore univoco che viene generato e inviato da un server a un client per identificare la sessione di interazione corrente. Il client di solito archivia e invia il token come cookie HTTP e/o lo invia come parametro nelle query GET o POST. Il motivo per utilizzare i token di sessione è che il client deve gestire solo l'identificatore: tutti i dati della sessione sono archiviati sul server (di solito in un database , a cui il client non ha accesso diretto) collegato a quell'identificatore. Esempi dei nomi utilizzati da alcuni linguaggi di programmazione per la denominazione del cookie HTTP includono JSESSIONID ( JSP ), PHPSESSID ( PHP ), CGISESSID ( CGI ) e ASPSESSIONID ( ASP ).

Gestione della sessione

Nell'interazione uomo-computer , la gestione della sessione è il processo di tenere traccia dell'attività di un utente attraverso le sessioni di interazione con il sistema informatico .

Le tipiche attività di gestione delle sessioni in un ambiente desktop includono la registrazione di quali applicazioni sono aperte e quali documenti sono state aperte da ciascuna applicazione, in modo che lo stesso stato possa essere ripristinato quando l'utente si disconnette e si collega in un secondo momento. Per un sito Web, la gestione della sessione potrebbe comportare la richiesta all'utente di eseguire nuovamente l'accesso se la sessione è scaduta (ovvero, è trascorso un certo limite di tempo senza attività dell'utente). Viene anche utilizzato per memorizzare informazioni sul lato server tra le richieste HTTP.

Gestione della sessione desktop

Un gestore di sessioni desktop è un programma in grado di salvare e ripristinare sessioni desktop. Una sessione desktop è tutte le finestre attualmente in esecuzione e il loro contenuto corrente. La gestione delle sessioni sui sistemi basati su Linux è fornita da X session manager . Sui sistemi Microsoft Windows , la gestione delle sessioni è fornita dal Session Manager Subsystem (smss.exe); la funzionalità della sessione utente può essere estesa da applicazioni di terze parti come twinsplay .

Gestione della sessione del browser

La gestione delle sessioni è particolarmente utile in un browser web dove un utente può salvare tutte le pagine e le impostazioni aperte e ripristinarle in un secondo momento o su un altro computer (vedi portabilità dei dati ).

Per facilitare il ripristino da un arresto anomalo del sistema o dell'applicazione, le pagine e le impostazioni possono essere ripristinate anche alla successiva esecuzione. Google Chrome , Mozilla Firefox , Internet Explorer , OmniWeb e Opera sono esempi di browser web che supportano la gestione delle sessioni. La gestione della sessione è spesso gestita tramite l'applicazione di cookie .

Gestione della sessione del server Web

L'Hypertext Transfer Protocol (HTTP) è senza stato: un computer client che esegue un browser Web deve stabilire una nuova connessione di rete TCP ( Transmission Control Protocol ) al server Web con ogni nuova richiesta HTTP GET o POST. Il server web, quindi, non può fare affidamento su una connessione di rete TCP stabilita per più di una singola operazione HTTP GET o POST. La gestione della sessione è la tecnica utilizzata dallo sviluppatore web per rendere lo stato della sessione di supporto del protocollo HTTP stateless. Ad esempio, una volta che un utente è stato autenticato sul server web, la successiva richiesta HTTP dell'utente (GET o POST) non dovrebbe far sì che il server web chieda nuovamente l'account e la password dell'utente. Per una discussione sui metodi utilizzati per ottenere ciò, vedere cookie HTTP e ID sessione

Nelle situazioni in cui più server Web devono condividere la conoscenza dello stato della sessione (come è tipico in un ambiente cluster ), le informazioni sulla sessione devono essere condivise tra i nodi del cluster che eseguono il software del server Web. I metodi per condividere lo stato della sessione tra i nodi in un cluster includono: informazioni sulla sessione multicasting ai nodi membri (vedi JGroups per un esempio di questa tecnica), condivisione delle informazioni sulla sessione con un nodo partner utilizzando la memoria condivisa distribuita o la virtualizzazione della memoria , condivisione delle informazioni sulla sessione tra i nodi utilizzando socket di rete, archiviando le informazioni sulla sessione su un file system condiviso come un file system distribuito o un file system globale o archiviando le informazioni sulla sessione all'esterno del cluster in un database .

Se le informazioni sulla sessione sono considerate dati transitori e volatili che non sono necessari per il mancato rifiuto delle transazioni e non contengono dati soggetti a verifica di conformità (ad esempio negli Stati Uniti, vedere l' Health Insurance Portability and Accountability Act e il Sarbanes-Oxley Agire per esempi di due leggi che richiedono un controllo di conformità), quindi è possibile utilizzare qualsiasi metodo di memorizzazione delle informazioni sulla sessione. Tuttavia, se le informazioni sulla sessione sono soggette alla conformità del controllo, è necessario prendere in considerazione il metodo utilizzato per l'archiviazione, la replica e il clustering della sessione.

In un'architettura orientata ai servizi , i messaggi SOAP o Simple Object Access Protocol costruiti con messaggi XML (Extensible Markup Language ) possono essere utilizzati dalle applicazioni consumer per far sì che i server Web creino sessioni.

Gestione delle sessioni tramite SMS

Proprio come HTTP è un protocollo senza stato , lo è anche SMS . Quando gli SMS sono diventati interoperabili tra reti rivali nel 1999 e gli SMS hanno iniziato la loro ascesa fino a diventare una forma di comunicazione globale onnipresente, varie aziende si sono interessate all'utilizzo del canale SMS per scopi commerciali. I servizi iniziali non richiedevano la gestione delle sessioni poiché erano solo comunicazioni unidirezionali (ad esempio, nel 2000, il primo servizio di notizie mobile è stato fornito tramite SMS in Finlandia ). Oggi, queste applicazioni sono chiamate messaggistica application-to-peer (A2P) a differenza della messaggistica peer-to-peer (P2P) . Lo sviluppo di applicazioni aziendali interattive richiedeva la gestione delle sessioni, ma poiché SMS è un protocollo stateless come definito dagli standard GSM, le prime implementazioni erano controllate lato client facendo in modo che gli utenti finali inserissero manualmente i comandi e gli identificatori di servizio.

Guarda anche

Riferimenti

  1. ^ Protocollo orientato alla sessione e protocollo orientato alla sessione
  2. ^ InterCarrier Messaging Guidelines (PDF) , CTIA , recuperato 02/06/2018
  3. ^ Hppy bthdy txt! BBC News World Edition, http://news.bbc.co.uk/2/hi/uk_news/2538083.stm 3 dicembre 2002.
  4. ^ GSM Doc 28/85 "Servizi e strutture da fornire nel sistema GSM" rev2, giugno 1985

link esterno