43 messaggi dal 06 settembre 2002
Salve a tutti! Scusate la lunghezza del post ma lo ritengo molto importante per tutti.
Desidero mettere a conoscenza di chi non lo sapesse la differenza fra session e cookies, ma soprattutto i forti limiti di questi ultimi.

Forse non tutti sanno che le session sono variabili che vengono memorizzate interamente sul server, prendendo quindi lo spazio di memoria interamente da esso, mentre i cookies vengono memorizzati sul client (sul server esiste solo un riferimento al cookie creato sul client), di conseguenza questi risultano piu' utili quando non si vuole gravare troppo il lavoro del server.

ATTENZIONE! I cookie hanno dei grossi limiti, a differenza delle session.
Il primo limite e' dovuto alla quantita' di memoria disponibile. Infatti basta fare una semplice prova, allocando ad esempio 25 o 30 cookie in una pagina asp e facendoli scrivere a video in un'altra pagina asp. Ci si accorge subito che ogni volta che si prova la pagina ci saranno alcuni cookie vuoti (per altro sempre diversi! tipico della Microsoft!). Questa prova pero' va fatta usando i cookie privi di chiave (ad esempio: response.cookies("pippo1")="ciao" , response.cookies("pippo2")="ciao").....).

Se invece si effettuano delle prove con cookie a chiave (es. response.cookies("chiave")("pippo")="ciao"), allocando ad esempio 30 cookie diversi, ma sotto la stessa chiave, allora non si incappera' piu' nel problema di prima, e tutto sembrera' funzionare correttamente. Il problema saltera' fuori quando i cookie arriveranno ad essere un numero piuttosto grosso (magari 150). A quel punto vedrete un collasso di tutti i cookie che verrano completamente persi, dal primo all'ultimo.
Evidentemente c'e' un limite di byte oltre al quale esplode tutto!

Ovviamente il problema dei cookie un po vuoti e un po no, non si riscontra in quest'ultimo caso perche' allocando tanti cookie con la stessa chiave in realta' si sta allocando solo UN cookie, che ha tanti valori concatenati.
Se invece provate ad allocare circa 30 cookie con chiavi diverse vedrete che il problema iniziale si ripresenta e avrete dei cookie che vengono persi inspiegabilmente!

Con le sessioni tutto questo non succede. Ho provato ad allocare fino a 500 variabili di tipo session senza avere il ben che minimo problema.
Lo svantaggio e' che si carica il server di lavoro maggiore e di maggior memoria occupata.

CONCLUSIONI:
se dovete sviluppare un sito web piuttosto articolato in cui saprete che avrete bisogno di parecchie variabili persistenti valutate le cose suddette!
Il mio consiglio:
- per un sito web utilizzate SOLO cookie a chiave. Per ogni chiave allocate al massimo 30 cookie e non superate mai le 10 o 12 chiavi. Inoltre in ogni cookie memorizzate solo pochi byte di informazioni (numeri o piccole stringhe) MAI memorizzare recordset interi o cose del genere.
- se avete bisogno di un numero maggiore di cookie rispetto a quanto appena consigliato, oppure se avete bisogno di memorizzare molti Kbyte in una singola variabile (ad esempio un elenco lungo di indirizzi di posta elettronica), utilizzate le session, cosi' non avrete problemi. Di norma comunque, per momorizzare tante informazioni, e' meglio studiare soluzioni alternative (recordset disconnessi....).

Beh, spero di essere stato chiaro e di aver aiutato qualcuno, che non era al corrente di queste cose, ad evitare che gli esplodesse un sito tra le mani come e' successo a me per aver usato troppi cookie!

Un saluto, Luca P. alias Cyberman

Luca
www.blade-runner.it
576 messaggi dal 30 aprile 2003
Ciao,
scusa ma non sono d'accordo con il tuo messaggio...

Io sono giunto alla conclusione opposta: sono le sessioni che danno un sacco di problemi, perché perdono il loro valore da una pagina all'altra senza alcun motivo.
Mi è successo più di una volta, utilizzando anche solo 3 variabili di sessione... non ho potuto fare altro che ripiegare sui cookies.
Comunque, da quello che ho letto su questo forum, quello delle sessioni è un problema ben conosciuto anche in ASP.NET.

Un'altra cosa: ma chi è quel pazzo che utilizza 150 cookies in una stessa applicazione?!?!?
Penso che sia una situazione che non si verificherà mai, quindi la mia conclusione è che utilizzando cookies con una chiave non si avranno problemi.

Io ad esempio utilizzo un solo cookie con chiave per creare la stringa di connessione in ogni pagina e non ho problemi:
Response.Cookies("connessione")("user") = "fungo"
Response.Cookies("connessione")("pwd") = "porro"
Response.Cookies("connessione")("db") = "carota"
Modificato da aletheia il 17 febbraio 2004 16.12 -

Prima o poi diventerò un guru!
43 messaggi dal 06 settembre 2002
Dunque, per quanto riguarda l'affidabilita' delle session non posso dire nulla perche' io non ho mai avuto problemi, ma posso anche credere a quello che dici. Magari puo' dipendere anche dal sistema operativo o da quanto sono aggiornati i componenti (asp, IIS, wscript, mdac).

Per quanto riguarda le altre cose che dici, fose non hai colto bene il senso del mio messaggio. E' ovvio che nessuno usera' 150 cookie in un sito, pero' era per fare dei test di resistenza. Si sa che gli stress-test si fanno appunto in condizioni estreme.
E in ogni caso, se rileggi il mio post, dico che i cookie esplodono gia' a 25! Prova se non ci credi. E 25 non mi sembra un numero cosi' esagerato. Io sono arrivato ad averne circa 25 in un sistema molto grosso formato da due siti collegati. Non mi pare che sia un'ipotesi cosi' assurda no?

E per quanto riguarda i cookie a chiave, l'ho detto anch'io che con quelli i problemi si limitano molto. Sempre che le chiavi non arrivino a 25!
Comunque se vuoi ti mando due semplici script che ti dimostrano che razza di schifezza siano i cookie.

A questo punto, visto che dici che anche le session danno risultati impredicibili, posso solo arrivare a concludere che non esiste un sistema affidabile per mantenere dei dati persistenti, se non quello di scriverli fisicamente da qualche parte!

Luca
www.blade-runner.it
576 messaggi dal 30 aprile 2003
Ciao,
scusa la risposta un po' brusca ma il fatto è che ho sempre avuto problemi con le sessioni...

Se, come dici te, è vero che il funzionamento dipende dal sistema operativo, dai componenti aggiornati, etc., allora è proprio la conferma che né le sessioni né i cookies sono affidabili al 100%.

Pensa che ho dovuto togliere tutte le sessioni a un'applicazione, e sostituirle con campi hidden del form. Il problema però è che aprendo il codice HTML questi dati sono visibili, e quindi è come se viaggiassero in chiaro (come le query string).

I cookies, come ti ho detto, ne utilizzo uno solo con chiave per la stringa di connessione... quindi è una soluzione che mi va più che bene. Spero di non dovermi mai trovare con 25 cookies in una stessa pagina!

Per quanto riguarda l'ASP.NET, leggi questo topic:
http://www.aspitalia.com/forum/topic.aspx?PostID=197816
Come puoi vedere, il problema delle sessioni è noto e comune a molti programmatori. Non può essere una coincidenza.

Beh... che conclusione possiamo trarre?
Che ASP e ASP.NET non sono affidabili?
E allora cosa facciamo, passiamo alle JSP? O al PHP?

Prima o poi diventerò un guru!
a parte che 25 cookie sono tanti ed inutili (se hai bisogno di tenere così tanti dati memorizzati, qualcosa a monte è errata), ogni cookie ha un limite fisico e conosciuto di 1024 byte.

inoltre per ogni session allocata, consumi memoria sul server (cosa che i cookie non fanno), moltiplicato anche solo per 100 è una tragedia. se consideri poi che le session cmq usano un cookie per tenere traccia del sessionID, capirai perchè tanti (me in testa) hanno abbandonato l'uso delle session in favore dei cookie.

fare un test come l'hai fatto tu, infine, non ha senso, specie perchè hai misura il limite per utente, dato più dal browser, piuttosto che il limite del server.
prova a rifare il test simulando 100 utenti con entrambi i sistemi e poi ne riparliamo

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
2.584 messaggi dal 14 maggio 2001
Aggiungo la mia esperienza a favore dei cookie...

Abbiamo un applicativo che esegue delle pagine web a seguito della ricezione delle telefonare da parte di un operatore
Ogni telefonata entrante genera una sessione per quella singola pagina lanciata
La "pagina" in realtà sono più pagine per permettere all'operatore di compilare un questionario sulle cose richieste dal cliente
Anche se non si usano le sessioni vengono allocati comunque 10Kb di memoria scaricati alla scadenza della sessione (15 minuti di default)
Risultato: blocco del server per mancanza di memoria libera....

Abbiamo dovuto disattivare le session direttamente dalla console di IIS
43 messaggi dal 06 settembre 2002
Non sono d'accordo sul fatto che 25 cookie siano tanti e inutili. Non capisco come si possa fare un'affermazione cosi' categorica senza sapere quanto e' complesso un sistema (in questo caso una intranet con diversi tool che lavorano insieme).
A me non sembra un numero cosi' poi elevato.

Sul fatto che si consumi memoria l'ho detto chiaramente anch'io nel post originale.

Dici che fare un test cosi' non ha senso. Se per te conoscere i limiti da non oltrepassare significa fare un test "senza senso", allora ok, e' senza senso. Io sono abituato a cercare sempre di capire qual e' il limite del sistema.

In ultimo: forse non detto abbastanza chiaramente il mio parere, anche se c'e' scritto nelle conlcusioni punto 1), comunque, non ho detto che le session siano meglio. Uso anch'io i cookie, ma occhio ai limiti! Speriamo che sta volta sia chiara la mia opinione.


Daniele Bochicchio ha scritto:
a parte che 25 cookie sono tanti ed inutili (se hai bisogno di tenere così tanti dati memorizzati, qualcosa a monte è errata), ogni cookie ha un limite fisico e conosciuto di 1024 byte.

inoltre per ogni session allocata, consumi memoria sul server (cosa che i cookie non fanno), moltiplicato anche solo per 100 è una tragedia. se consideri poi che le session cmq usano un cookie per tenere traccia del sessionID, capirai perchè tanti (me in testa) hanno abbandonato l'uso delle session in favore dei cookie.

fare un test come l'hai fatto tu, infine, non ha senso, specie perchè hai misura il limite per utente, dato più dal browser, piuttosto che il limite del server.
prova a rifare il test simulando 100 utenti con entrambi i sistemi e poi ne riparliamo


Luca
www.blade-runner.it
43 messaggi dal 06 settembre 2002
Aggiungo una piccola rettifica: ne bastano 20 per far esplodere tutto.
Bye

Luca
www.blade-runner.it

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.