Switch to American English
Giovanni's logo
La gestione dei Cookie
this means Version 2
indice analitico
M
power search
blue line
1. Che cosa sono i cookie

I cookie sono un meccanismo per memorizzare informazioni persistenti sul client. Dato che l'HTTP è un protocollo privo di "memoria", i cookie forniscono un modo per mantenere l'informazione attraverso successive richieste del client.
Un cookie può essere assimilato ad una area dati sul client.
Il cookie gode delle proprietà seguenti:
Nome obbligatorio Identifica il cookie (come se fosse il nome di una area dati).
Valore obbligatorio È il contenuto del cookie (come se fosse il valore di un'area dati). Si noti che il browser di Netscape non accetta dei blank nel valore del cookie. Se questo avviene, dopo il primo blank il resto della stringa Set-Cookie viene ignorato. Questo impone che si usino caratteri sostitutivi dei blank per il valore del cookie (la operazione opposta sarà necessaria dopo il reperimento del cookie).
Scadenza facoltativa È la data e l'ora sino a cui il cookie deve dsopravvivere Se la scadenza non è specificata, il cookie scade quando la sessione del browser viene chiusa.
Dominio facoltativo Il dominio da cui il cookie può essere reperito. Se il dominio non è specificato, il browser dovrebbe sostituirlo con il nome host del server che ha generato il cookie.
Percorso facoltativo Il percorso da cui il cookie può essere reperito. Se il percorso non è specificato, il browser dovrebbe sostituirlo con il percorso della pagina che ha generato il cookie.
HttpOnly facoltativo HttpOnly č un flag additivo per la testata HTTP Set-Cookie HTTP. L'utilizzo del flag HttpOnly riduce il rischio che uno script malizioso del client possa accedere e/o modificare il cookie cosė protetto (a patto che il browser supporti tale protezione).
Per ulteriori informazioni, vedi questa pagina.


È il browser che memorizza e reperisce i cookie.
  • Netscape memorizza i cookie nel file
    C:\Program Files\Netscape\Users\Default\cookies.txt.
    Ogni cookie occupa una riga.
  • Microsoft Internet Explorer mantiene un oggetto per ogni cookie. Tutti questi oggetti sono racolti nella cartella
    C:\WINDOWS\Cookies

Il browser, ogni volta che carica una pagina, mette a disposizione tutti i cookie non ancora scaduti che:

  1. corrispondono al dominio della pagina
    (per esempio, www.ibm.com oppure 195.183.8.2)
  2. si trovano nel percorso della pagina
    (per esempio, nel percorso di questa pagina /cgidev2oit/exhibiu8.htm vengono resi disponibili tutti i cookie con percorso "/" e tutti i cookie con percorso "/cgidev2oit".
Per ulteriori informazioni sulle regole che controllano l'accesso ai cookie, si legga Determining a Valid Cookie.



2. Creazione di un cookie tramite CGI - Approccio base

Per creare un cookie, occorre fornire, nell'html esterno, una "http header" Set-Cookie come segue:

/$top
Content-type: text/html
Set-Cookie: name=value [;EXPIRES=dateValue] [;DOMAIN=domainName] [;PATH=pathName] [;SECURE] [;HTTPONLY]
(riga blank obbligatoria)
<html>
  ... ecc. ...

Per una spiegazione dettagliata della "http header" Set-Cookie, si prega di riferirsi alla seguente pagina del manuale JavaScript Client Reference.



3. Reperimento di un cookie in un CGI - Approccio base

Un CGI può reperire tutti i cookie disponibili tramite la variabile di ambiente HTTP_COOKIE. I cookie resi disponibili sono quelli compatibili con il nome del dominio ed il path del CGI. ambiante HTTP_COOKIE nel caso in cui fossero trovati compatibili due cookie:

  • il primo con name=IBM e value=HG1V432
  • il secondo con name=Easy400 e value=JohnVincentBrown
IBM=HG1V432; Easy400=JohnVincentBrown

Nota 1. Datto che tutti i cookie compatibili vengono restituiti in un'unica stringa, è compito del programma di reperire dalla stringa l'eventuale cookie a cui potrebbe essere interessato.

Nota 2. Il valore di un cookie può contenere caratteri escaped (un carattere escaped è la rappresentazione esadecimale in ASCII di un caratter ASCII; per esempio, %3D rappresenta un carattere "escaped" ed è la rappresentazione esadecimale in ASCII del carattere ASCII "=").
I caratteri "escaped" sono generati dal web browser allorchè il cookie viene memorizzato; ciò avviene per eliminare conflitti con separatori di stringa e caratteri di controllo.
Resta dunque responsabilità del programma di convertire --nel valore di un cookie reperito-- tutti i caratteri "escaped" ASCII nei corrispondenti caratteri EBCIDIC.

Vedi il nostro esempio su come creare e reperire un cookie utilizzando questo tipo di approccio.



4. Creazione/Reperimento di un cookie coi CGI - Approccio progredito
Il service program cgidev2/cgisrvpgm2 fornisce due procedure che rendono più agevole il compito di gestire i cookie con i CGI:
  • crtCookie consente una costruzione più semplice della "http header" Set-Cookie
  • getCookieByName reperisce un dato cookie dalla stringa della variabile di ambiente HTTP_COOKIE environment variable.
/$top
content-type: text/html
/%setmycookie%/

<html>
... ecc. ...
 ** Variables used to build the http header "Set-Cookie"
 ** through subprocedure "CrtCookie"
D  SetMyCookie    s           1000a   varying
D  CookieNam      s           1000a   varying
D  CookieVal      s           4000a   varying
D  RetCode        s             10i 0
D  Domain         s           1000a   varying
D  Path           s           1000a   varying
D  Secure         s               n
D  Expires        s               z
 ** Other variables
D TimeNow         s               z
 *=====================================================================
 * Create a cookie
 *   Name:    ThreeMonths
 *   Value:   current timestamp
 *   Domain:  current CGI domain
 *   Path:    /
 *   Secure:  no
 *   Expires: three months from now
 *   HttpOnly:sė
 *=====================================================================
C     CrtMyCook     begsr
C                   eval      CookieNam = 'ThreeMonths'
C                   time                    TimeNow
C                   eval      CookieVal = %char(TimeNow)
C                   eval      Domain    = getenv('SERVER_NAME':qusec)
C                   eval      Path      = '/'
C                   time                    TimeNow
C     TimeNow       adddur    3:*m          Expires
 *
C                   eval      SetMyCookie = CrtCookie(CookieNam:
C                             CookieVal:
C                             RetCode:
C                             Domain:
C                             Path:
C                             *off:
C                             Expires:
C                             *on)
 * or, if you like that better,
C*                  eval      SetMyCookie = CrtCookie('ThreeMonths':
C*                            CookieVal:
C*                            RetCode:
C*                            getenv('SERVER_NAME':qusec):
C*                            '/':
C*                            *off:
C*                            Expires:
C*                            *on)
 * Now substitute the string to create the cookie in the output html
C                   callp              updHtmlVar('setmycookie':SetMyCookie)
C                   endsr
 *=====================================================================
 * Retrieve a cookie of given name
 * Returns a string containing the current value of the cookie,
 *         or blanks if cookie not found
 *=====================================================================
C     RtvMyCook     begsr
C                   eval      CookieNam = 'ThreeMonths'
C                   eval      CookieVal = GetCookieByName(CookieNam)
 * or, if you like that better,
C*                  eval      CookieVal = GetCookieByName('ThreeMonths')
C                   endsr

Vedi il nostro esempio su come creare e reperire un cookie utilizzando questo tipo di approccio.