Newsgroup: it.comp.lang.javascript
Titolo: Problemi con i Cookie in lettura

Sto cominciando a fare esperimenti con i cookie, perche' vorrei poter
segnalare ai visitatori, eventuali aggiornamenti intervenuti dopo la
loro ultima visita.
Passiamo ora al mio problema:
In scrittura del cookie, non ho nessun problema, in quanto i dati
vengono scritti regolarmente (andando a vedere su disco, trovo
regolarmente quanto previsto).
Il problema si pone in lettura, in quanto l'istruzione:
  var xxx = document.cookie.length;
mi ritorna sempre 0 (zero), e di conseguenza anche le altre
istruzioni:
  document.cookie.substring() e
  document.cookie.indexOf()
non restituiscono i valori previsti.
Per chi fosse interessato, riporto l'intera funzione:
	function getCookie(n) {
       var ar = n + "=";
	  var al = ar.length;
	  var cl = document.cookie.length;
	  var i = 0;
	  while (i < cl) {
	    var j = i + al;
	    if (document.cookie.substring(i,j) == ar)
	      return getCookieVal(j);
	    i = document.cookie.indexOf(" ",i) + 1;
	    if (i == 0)
	      break;
	  }
	  return null;
	}
Queste istruzioni sono state provate con IE 4.0 e Opera 3.60, con
identici scarsi risultati.
Ringrazio anticipatamente chi sapra' darmi qualche dritta.
--------------
Flavio Colombo
http://utenti.tripod.it/flacol/

Se permetti ti propongo un metodo molto semplice per gestire i cookies:
scaricati il file: 
http://www.infotronica.it/darius/cookies.js
inserisci un tag <script src="cookies.js"></script> nell'HEAD, e usa le seguenti funzioni per leggere e scrivere i biscottini:
var expdate   = new Date(); expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 365));
var docpath   = document.location.path;
SetCookie("variabile",valore, expdate, docpath, null, false);
quindi:
variabile=GetCookie("variabile");
Se invece vuoi proprio rimanere sul tuo codice, pls invialo tutto, così faciliti la vita a chi deve "debuggare"...
:)
Ciao.
Darius. (
www.infotronica.it/darius/
)

Boh, non so. Prova con:
var pippone = document.cookie
var lungh = pippone.length

Sorry, forse non avrei dovuto correre troppo: ho appena provato a inglobare il tuo codice da qualche parte e mi funziona perfettamente: del resto vedo che ha preso molto dagli script "quasi ufficiali" in circolazione, quelli che ti dicevo nel msg precedente, tanto per intenderci...
Il problema quindi non è nel pezzo di codice che hai mandato.
Sicuro di aver settato bene il cookie, prima?
Non penso ci siano altre possibilità.
Ciao.
Darius. (
www.infotronica.it/darius/
)

sulla macchina.
Nonostante il web server io ce l'abbia solo nei miei sogni i cookies mi funzionano perfettamente anche in locale.
Che dici? Forse è perché basta anche solo il *pensiero* di un web server?
:)
Continuo a pensare ad un setcookie fatto maluccio.
Flavio, confermaci, pls.
Ciao.
Darius. (
www.infotronica.it/darius/
)

Una guida a Javascript in italiano che spieghi come (ozzac) si settano i
cookies?
Ne conosci una?
E' un po' che impazzisco con questa cosa, non mi basta copiare gli script
altrui, voglio capire.
--
La Forza dei Forti sta nell'Attraversare le Traversie con occhio sereno.
(Paperinik)
Nettuno

Ciao, Nettuno.
Vuoi sapere la mia guida preferita al Javascript?
Si chiama news:it.comp.lang.javascript, ed è la migliore, anche se finora non ho mai consultato il capitolo "biscottini". :)
A parte gli scherzi: sorry ma non ho proprio idea di quale sia il libro migliore...
So che una volta circolavano dei tutorial JS in italiano su questo NG, ma quelli che ce li avevano li custodivano gelosamente...
Magari un bel giorno si potrebbe redigere un document sulla scrittura dei cookies, qualche scriptuccio con funzioni avanzate per la loro gestione e metterli online sul sito un-official del NG: 
www.probo.it/JavaScript/
Se hai problemi nel settare i cookies e non ti basta copiare quelli altrui puoi prima leggerli, capirli, e poi ricrearli in maniera diversa: allora sarai sicuro di aver capito tutto! :)
Se hai ancora problemi, quasi sicuramente è uno dei soliti errori di battitura. Capita...
:)
Ciao.
Darius. (
www.infotronica.it/darius/
)


Ti invio l'intera serie di funzioni che ho utilizzato e l'HTML con cui
l'ho provato, se riesci a provarle e dirmi dove' il buco, ti sarei
molto grato.
<html>
<head>
</head>
<body bgcolor="#ffffff" link="#ff0000" vlink="#ff0000">
<script language="javascript" SRC="cookie.js"></script>
<hr>
<script language="javascript">
  var expdate = new Date();
  var test_value = "AbC-12345";
  expdate.setTime(expdate.getTime() + (5*24*60*60*1000));
  document.write("1."+test_value+"<br>");
  setCookie("test_cookie",test_value,expdate);
  test_value ="";
  document.write("2."+test_value+"<br>");
  test_value = getCookie("test_value");
  document.write("3."+test_value+"<br>");
</script>
<hr>
</body>
</html>
//-----------------------------------------------------------------
// Gestione Cookie
//   getCookie(nome)
//     Legge ('null' se non presente)
//   setCookie(nome, valore [,expires] [,path] [,domain] [,secure])
//     Imposta
//   dltCookie(nome)
//     Cancella
//-----------------------------------------------------------------
function getCookieVal(o) {
  var s = document.cookie.indexOf(";",o);
  if (s == -1)
    s = document.cookie.length;
  return unescape(document.cookie.substring(o,s));
}
function getCookie(n) {
  var ar = n + "=";
  var al = ar.length;
  var cl = document.cookie.length;
  var i = 0;
  while (i < cl) {
    var j = i + al;
    if (document.cookie.substring(i,j) == ar)
      return getCookieVal(j);
    i = document.cookie.indexOf(" ",i) + 1;
    if (i == 0)
      break;
  }
  return null;
}
function setCookie(n,v) {
  var av = setCookie.arguments;
  var ac = setCookie.arguments.length;
  var ex = (ac > 2) ? av[2] : null;
  var pt = (ac > 3) ? av[3] : null;
  var dm = (ac > 4) ? av[4] : null;
  var sc = (ac > 5) ? av[5] : null;
  document.cookie = n + "=" + escape(v) +
    ((ex == null) ? "": ("; expires=" + ex.toGMTString())) +
    ((pt == null) ? "": ("; path=" + pt)) +
    ((dm == null) ? "": ("; domain=" + dm)) +
    ((sc == null) ? "; secure" : "");
}
function dltCookie(n) {
  var ex = new Date();
  FixCookieDate(ex);
  ex.setTime(ex.getTime() - 1);
  var cv = getCookie(n);
  if (cv != null)
    document.cookie = n + "=" + cv + "; expires=" + ex.toGMTString();
}
//---------------------------------------------
Ti ringrazio anticipatamente, ciao




Caro Darius:
ti ringrazio per il consiglio, gia' consideravo ICLJ un'ottima guida. Il
problema e' che io ho bisogno di conoscere metodi e proprieta' dell'oggetto
"cookie" e analizzando uno o piu' script, se peraltro so che  riuscirei
nell'impresa, so anche che impiegherei troppo tempo ed energie. Per quanto
non mi spaventi la prospettiva di andare a dormire alle 3 e rotti, se lo
facessi dovrei fermare il mio lavoro e proprio non posso permettermelo.
Stasera faccio un salto da feltrinelli e vedo un po' cosa tenteranno di
propinarmi...
...a sproposito: ho rimediato Director 6 e relativo (1280 pagine) manuale.
Sembra capace di fare vere e proprie magie.


Caro Angelmike...
Il cookie, per quel poco che ne so ancora, e' un dispositivo software client
side.
Un web server puo' leggerli ed utilizzarli per fini suoi (come fa IIS4 con
l'oggetto Session) ma e' e resta dal lato client, quindi non cambia nulla.
Cambia molto invece se lo scritp e' server side (<script language="xxxxx"
runat="SERVER"></script>), ma allora la presenza di "runat=server" impedisce
al client di eseguire lo script.


Ecco qua:
<html>
<head>
<script language="javascript" SRC="cookie.js"></script>
</head>
<body bgcolor="#ffffff" link="#ff0000" vlink="#ff0000">
<hr>
<script language="javascript">
  var expdate = new Date();
  var test_value = "AbC-12345";
  expdate.setTime(expdate.getTime() + (5*24*60*60*1000));
  document.write("1."+test_value+"<br>");
  setCookie("test_cookie", test_value, expdate, document.location.path, null, false);
// Il settaggio del cookie devi farlo così.
  test_value ="";
  document.write("2."+test_value+"<br>");
  test_value = getCookie("test_cookie");
// qui per sbaglio avevi pure messo test_value anziché test_cookie...
  document.write("3."+test_value+"<br>");
</script>
<hr>
</body>
</html>
Tutto qui: con il file "cookie.js" non c'erano problemi.
Ciao.
Darius. (
www.infotronica.it/darius/
)

Grazie mille, ora con IE4 funziona, con Opera 3.60 no, ma non si puo'
avere tutto dalla vita.
Ciao, e grazie ancora
