Newsgroup: it.comp.www.asp
Titolo: lavorare senza cookies, urgentissimo

Problema:
alcuni browser non usano i cookies
come faccio a mantenere traccia degli acquisti che sta facendo un cliente se
non posso usare i cookies?
non suggerite cookie munger perche' combina casini indicibili (almeno la
versione che ho io)
suggerimenti e idee molto ben accetti

 writes:
H> Problema:
H> alcuni browser non usano i cookies
H> come faccio a mantenere traccia degli acquisti che sta facendo un cliente se
H> non posso usare i cookies?
Passi a PHP che non usa i cookie per il mantenimento della sessione...
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+
| Attenzione: rispondo ad ogni invio di pubblicità non richiesta | 
| o spam di qualsiasi altro genere con un messaggio al provider  |
| di competenza. Ai sensi della legge sulla privacy NON avete il |
| permesso di utilizzare i miei dati per questi scopi.           |
+----------------------------------------------------------------+

 Passi a PHP che non usa i cookie per il mantenimento della sessione...
Non per forza.
Identifica in qualche modo l'utente, in maniera univoca e salva le
informazioni in un file o in un DB.
Ogni volta che passi da una pagina all'altra, portati dietro
l'identificativo dell'utente. Ma non sevi utilizzare una variabile di
sessione. Semplicemente, scrivi l'ID nell'indirizzo della pagina.
Del resto credo sia lo stesso sistema che utilizzano altri server che non
usano i cookies.
Magari, invece di utilizzare semplicemente un ID, lo criptano o lo
modificano di volta in volta, per migliorare la sicurezza: cosa non molto
difficile.


Se dovessi lamentarmi con il mio gommista perché i pneumatici della mia auto
si consumano in maniera irregolare, e lui mi rispondesse di cambiare auto lo
riempirei di botte! :o)
Penso che Hawk sia contento di sentirsi dire che l'investimento di tempo e
soldi per una tecnologia sono inutili visto che non gli servono a nulla e
che č meglio il PHP. Senza rancore... si scherza...
Hawk puň controllare se l'utente ha i cookies abilitati con il passaggio di
una variabile session da una pagina all'altra o con il controllo della
server variables "HTTP_COOKIE". In caso li abbia disattivati puň
visualizzare un messaggio...

> Passi a PHP che non usa i cookie per il mantenimento della sessione...
AS> Non per forza.
Solo  che la tua  soluzione, per  quanto possa  avere un  elevato hack
value è dannatamente laboriosa e poco manutenibile.
AS> Identifica in qualche modo l'utente, in maniera univoca e salva le
AS> informazioni in un file o in un DB.
Questo non  è fondamentale.  La copia dell'identificativo  può casomai
servire per non generare due ID diversi.
AS> Ogni volta che passi da una pagina all'altra, portati dietro
AS> l'identificativo dell'utente.
E questo  è dannatamente laborioso,  sopratutto se le  pagine esistono
già...
AS> Ma non sevi utilizzare una variabile di
AS> sessione. 
Non  è detto.  Usando  il famoso  DB  si può  conservare il  sessionid
originario, o usare direttamene quello per generare il primo ID.
Una volta che hai il SessionID puoi far resuscitare la sessione, anche
se è laborioso...
AS> Semplicemente, scrivi l'ID nell'indirizzo della pagina.
O.K.  parametro  CGI. Deboluccio,  potrebbe  oltretutto permettere  di
entrare in sessioni non proprie.
AS> Del resto credo sia lo  stesso sistema che utilizzano altri server
AS> che non usano i cookies.
PHP non usa un metodo del genere, per nulla.
L'anno scorso  al Pluto Meeting  a Padova ci  fu un intervento  di una
persona  che  aveva sviluppato  una  applicazione  PHP. Interessato  a
questa alternativa a ASP ho chiesto come venisse mantenuta la sessione
(avevo già realizzato l'ambaradan  che mi faceva risorgere la sessione
dopo  gite in  altre  applicazioni ASP).   E  mi fu  detto  che è  una
combinazione  dell'ID  del  browser  unito all'IP  della  macchina,  o
qualcosa del genere.


> 
A> Se dovessi lamentarmi con il mio gommista perché i pneumatici della mia auto
A> si consumano in maniera irregolare, e lui mi rispondesse di cambiare auto lo
A> riempirei di botte! :o)
Può aver ragione invece. La tua macchina ha la meccanica così malconcia 
che è praticamente "faulty beyond any recovery". 
E' una cosa molto brutta aver sbagliato ad impostare un progetto.
A> Penso che Hawk sia contento di sentirsi dire che l'investimento di tempo e
A> soldi per una tecnologia sono inutili visto che non gli servono a nulla e
A> che è meglio il PHP. Senza rancore... si scherza...
Lo so. Ma può costare  meno (non solo nell'immediato) che mettere mano
a tutte le pagine ASP per  far circolare un parametro CGI con il quale
prelevare da un database quelli che sarebbero gli oggetti session. Non
lo so, ma a naso un accesso in memoria è tanto più veloce di una query
o di un'apertura (con scansione) di un file.
A> Hawk può controllare se l'utente ha i cookies abilitati con il passaggio di
A> una variabile session da una pagina all'altra o con il controllo della
Gran bel suggerimento davvero! Senza rancore... si scherza...
La sessione  in ASP ___ SI BASA  SUI COOKIE ___. E'  tramite un cookie
che  il  server  riconosce  la   richiesta  di  una  pagina  ASP  come
appartenente ad una certa istanza dell'applicazione (sessione).
[Nota: se le pagine non vengono richiamate in maniera uniforme mi pare
che il  check dell'URL con il  cookie fallisca e  venga istanziata una
nuova sessione.]


>> 
Scusa, non puoi utilizzare l'oggetto Session ?
Guercio
Long live and prosper \\//_
--**Bad dog don't cast that spell**--

 prelevare da un database quelli che sarebbero gli oggetti session.
Puoi spiegare a tutto il gruppo che cosa sono i parametri CGI? Se non sai
nemmeno come chiamare le cose, come puoi spiegarle?
Ci puoi illuminare come PHP possa magicamente tenere traccia di una sessione
senza cookie e senza passaggio parametri con metodo GET (i tuoi parametri
CGI)?
Con filtri ISAPI si puo' fare in IIS che venga aggiunto una codice di
sessione alla fine di ogni link. In questo modo (il metodo te lo studi tu)
ti porti dietro un codice per identificare la tua sessione, criptata con il
metodo che piu' ti piace.
Ciao
Marco

>>> 
G> Scusa, non puoi utilizzare l'oggetto Session ?
Leggere la documentazione. Le session si basano sui cookie per la loro
esistenza.


 metodo che piu' ti piace.
Come si fa? Mi interessa molto. Eviterei del lavoro in più.

 qualcosa del genere.
Poco convincente. Come si ottiene l'ID del browser? L'indirizzo IP, inoltre,
è poco affidabile. Se il cliente passa per in Proxy, come ci si comporta?


Moderatore di it.comp.www.asp
Sito di supporto: 
http://www.aspitalia.com/newsgroup/icwa.asp
Tutto su WindowsNT? Su 
http://www.aspitalia.com
Professional WAP, per te su 
http://www.aspitalia.com/store/
Impara l'e-conomy su 
http://www.e-conomy.it

"Andrea Sciamanna" <andrea.s...@libero.it.cancellami> ha scritto nel
messaggio news:8psseg$8sm$2...@serv1.iunet.it...

conosci il C++? se la risposta è no, lascia perdere.
inoltre un filtro ISAPI come questo appesantisce di tanto il server.
ne esiste già uno che si chiama cookie munger, che invece che cookie,
dovrebbe chiamarsi memory munger, visto che si ruba tutte le risorse libere.
perchè? perchè passa una specie di sessionid aggiungendolo a tutti i link.
ma questo richiede che per ogni singolo bit che passa dal server al client
questo filtro analizzi e faccia un parsing di tutto. il che si traduce in un
appesantimento pazzesco del tutto.
e come se non bastasse, filtra anche cose che non c'entrano, tipo le GIF o
gli MP3... :-(((


 gli MP3... :-(((
Ok, allora passo e continuo ad utilizzare i miei sistemi, con o senza
cookies. :-)

 cookies. :-)
esatto ;-)))


> prelevare da un database quelli che sarebbero gli oggetti session.
MG> Puoi spiegare a tutto il gruppo che cosa sono i parametri CGI? Se non sai
MG> nemmeno come chiamare le cose, come puoi spiegarle?
Se  non ricordo  male quei  parametri che  tu chiami  non  proprio con
precisione "metodo GET"  (che è un modo di  richiedere la pagina) sono
detti "CGI parameters" dalal Common Gateway Interface. Anyway ci siamo
capiti  sono quelli  li' e  li usi  anche coi  POST  (quindi chiamarli
metodo GET mi pare un tantino fuorviante).
MG> Ci puoi  illuminare come PHP  possa magicamente tenere  traccia di
MG> una sessione  senza cookie e senza passaggio  parametri con metodo
MG> GET (i tuoi parametri CGI)?
Già detto nel  gruppo, forse hai saltato il post o  il tuo newsfeed fa
arrivare i post fuori ordine.
Ripeto tutto  un'altra volta :  ho assistito ad una  convention (Pluto
Meeting 99) dove veniva presentato il PHP illustrando una applicazione
di E-commerce  reale. Avendo  già fatto una  applicazione ASP  che non
solo  usava  le  sessioni,  ma  le  faceva  pure  risorgere,  mi  sono
incuriosito ed  ho posto  la domanda al  relatore. La risposta  che ho
avuto era  più o  meno questa "PHP  usa l'accoppiata  id-del-prowser +
indirizzo IP, niente cookie."
MG> In questo modo (il metodo te lo studi tu)
Non mi  interessa in questo momento,  mi spiace. Se  mi chiederanno di
usare  quelle API  le guarderò,  al  momento mi  chiedono di  scrivere
codice di altro tipo  :) .  ASP è solo una delle  cose che mi chiedono
di fare.
MG> ti porti dietro un codice per identificare la tua sessione, criptata con il
MG> metodo che piu' ti piace.
Sei sicuro che anche criptata qualcuno non riesca a trovare il modo di
alterare l'informazione (che che  presumo viaggi con quelli che chiamo
parametri CGI) in modo da entrare nella sessione di un'altro ?


> conosci il C++? se la risposta è no, lascia perdere.
AS> Purtroppo no. Mi fermo all'ANSI C, studiato all'università (non sono andato
AS> avanti, quindi non conosco altro :-)
Dovrebbe bastarti. Di solito le API  di MS sono chiamate C, poi magari
fanno delle classi C++. Ma col C dovresti cavartela. Se non impazzisci
al contatto della notazione ungherese.
Ma  non  so  se ne  vale  la  pena.  DB  mi sembra  _molto_  preparato
sull'argomento e le sue affermazioni sono decisamente affidabili.


> o di un'apertura (con scansione) di un file.
DB> già. secondo me è una perdita immane di tempo.
DB> li avvisi che ci vogliono i cookie, al massimo se li attivano solo per
DB> questa sessione.
Vedi avviso all'entrata di 
www.rivarossi.com
 :)


 indirizzo IP, niente cookie."
Non per dire eh... ma ho parlato con un amico che per PHP (e Linux in
genere) viene considerato da molti un guru.
Per quanto ne sa lui, in relazione alle problematiche cu sui si sta
discutendo (sessioni utente) anche PHP si basa sulle stesse condizioni con
cui si lavora con ASP: o cookie o database.
Da ignorante e da distratto quale sono chiedo: l'applicazione di E-commerce
reale di cui sopra, come risolve l'eventuale accesso da una postazione
pubblica (stesso browser e stesso IP)?
Claudio


E infatti Claudio ha ragione!
Ho fatto un test a proposito (e poi non ditemi che tratto l'argomento con
leggerezza!), ho scritto questo esempio in PHP4 che usa le variabili session
per il controllo se si ha già visitato la pagina:
<?
session_register("controllo");
$file=fopen("counter.txt","r");
$num=fgets($file,10);
fclose($file);
if ($controllo!==0) {
$num+=1;
$controllo=0;
}
print("Visitatori: ".$num);
$file2=fopen("counter.txt","w");
fputs($file2,$num);
fclose($file2);
?>
E' molto semplice: legge da un file "counter.txt" il numero di visita e
l'incrementa di uso solo se la variabile session "controllo" non è settata a
uno.
Con i cookie abilitati il contatore rimane fermo; disabilitati aumenta.
Per adesso l'auto non la cambio... ;-P
Ciao,
Zani A.

value è dannatamente laboriosa e poco manutenibile.
invece "passare a php" è una brezza...  :-)
--
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport

 writes:
A> E infatti Claudio ha ragione!
Non si smette mai di imparare. Grazie del test.


 writes:
GUL> Dovrebbe bastarti.
E invece no (mai guardara la documentazione prima eh ?), paiono proprio
delle belle classi C++... 


 se è laborioso...
AS> Prego: dimmi  come.
Ecco  qui  l'algoritmo in  breve.   E'  correntemente  in linea  nella
applicazione che  curo dato  che mi sono  trovato costretto a  fare un
salto  su un'altra  applicazione  ASP per  validare  dei dati  immessi
dall'utente con il  contenuto di un'altro DB (al  momento access :( :(
).   Nota, l'applicazione  è corporate,  non di  e-commerce, ma  fa un
pesante uso di variabili sessione.
Ambaradan1.asp
	Viene  inviata   all'utente  una  pagina   con  un  MSFlexGrid
	incapsulato  in  un ActiveX.   L'utente  aggiunge righe  nella
	griglia  (client  scripting)  e  chiede  la  verifica.  Chiamo
	Start.asp passando  tramite un form totalmente  hidden tutti i
	dati della griglia.
Start.asp
 
	Richiede  il  sessionID (diciamo  che  vale  XXXXX), salva  il
	contenuto del  form in variabili sessione,  raccoglie i valori
	da usare come chiavi sul DB 'alieno' e richiama PrendiDati.asp
	con l'url
http://altroserver/AltraApp/PrendiDati.asp?ID=XXXXX&CHIAVI=YYYYYYY
PrendiDati.asp
	Estrae i dati  e li passa a Ritorno1.asp.  Tra i parametri CGI
	passati a Ritorno1.asp c'è sempre il SessionID XXXXX
Ritorno1.asp
	Esegue l'istruzione
Response.Cookies("SessionID") = Request.QueryString("ID")
	e fa passare gli altri dati a Ritorno2.asp
Ritorno2.asp 
	Preleva i dati dalla querystring e completa le strutture salvate
	nelle variabili session dallo script Start.asp. Quindi richiama
	nuovamente Ambaradan1.asp
Ambaradan1.asp
	Questa  volta le  variabili sessione  sono  valorizzate, viene
	ripristinata  la   griglia  aggiungendo  le   informazioni  di
	verifica prelevate dall'altro database.
(Nota: con la migrazione ad Oracle questo ambaradan verrà accantonato)
Lo svantaggio di questo accrocchio fetido è che rimangono tutta una serie
di sessioni istanziate ma mai usate...
AS> Cmq, laborioso per laborioso, che differenza c'è con il mio metodo
AS> (che cmq non ritengo laborioso)?
La differenza era che avevi i  dati in memoria, al limite swapped out,
ma sempre più accessibili che in un DB.
L'errore che facevo  è che questa tecnica alla  Frankesein Jr. prevede
un  rientro in  2 fasi  per  funzionare bene,  i primi  test con  solo
Return1.asp non avevano dato esiti pienamente soddisfacenti.
In ogni caso Daniele Bochicchio ha fatto notare che oramai quasi tutti
i browser  usano i cookie e chi  si ostina ad usare  un vecchio client
probabilmente  si  fida  dell'E-Commerce  come di  una  pagamento  con
banconote da 3000 lire...
Quanto  a PHP,  ho preso  una bella  cantonata (Scrivere  100  volte :
Leggere il manuale)


 ma sempre più accessibili che in un DB.
Ma tu fai comunque uso di cookies!!!
Il problema era quello. Tu non volevi usarli e io ti ho presentato
l'alternativa.

> ma sempre più accessibili che in un DB.
AS> Ma tu fai comunque uso di cookies!!!
Stavo pensando ad un modo per fare risuscitare una sessione anche in
assenza di supporto dei cookie, in modo da usare l'oggetto session.


non posso usare i cookies?
Puoi usare la stringa di connessione, visto che non ci sono dati
sensibili. Ti bastano due parametri: strArrayCodiciProdotti e
strArrayQuantita'.
All'inizio delle pagine trasformi le stringhe in array.

Scusa, non puoi utilizzare l'oggetto Session ?
Senza cookies (e cookie munger) direi di no.

 probabilmente optato per una applicazione client server...
Lo standard non è nè IE, nè Linx.
Se tu vuoi fare una cosa non standard, puoi fare tutto quello che vuoi: puoi
anche pregare i santi affinchè ti mantengano viva una sessione senza
Cookies.

> probabilmente optato per una applicazione client server...
AS> Lo standard non è nè IE, nè Linx.
Guarda che Lynx  e Linx sono due programmi diversi,  e gli standard so
benissimo  dove  sono elencati  (nelle  RFC -  A  proposito  ti va  di
investire in apparecchiature conformi alla RFC1149 ?)
Ho detto  che è  un'applicazione corporate. Mi  scuso, credevo  che il
termine fosse di  uso comune. Significa che è  un'applicazione che una
azienda usa al suo interno. E  al suo interno una azienda può definire
gli standard che più gli aggradano. Prosa decide che il suo standard è
l'open source ed un'altra che il suo standard è Internet Explorer.
E qui io  chiudo il thread.  Ho abusato fin  troppo della pazienza del
moderatore  e degli altri  utenti.  Ringrazio  sinceramente chi  mi ha
dimostrato coi fatto  che su PHP avevo preso  una topica clamorosa. Mi
ha aiutato a rammentare alcuni principi fondamentali (RTFM!!!!).
Per chi  non mi  ha potuto  comprendere, mi spiace.  Non ho  tempo per
essere meno criptico.


 essere meno criptico.
Qui si cerca di imparare e non solo di esternare le proprie conoscenze.
Se non sei disposto a discutere, cosa ci fai qui?
O sei uno di quelli che attinge soltanto e si aspetta che gli altri
rispondano sempre e comunque alle tue domande e/o richieste?