Cookies verwenden - Beispiel für JavaScript-Programmierung

Inhalt 1:
Inhalt 2:
Inhalt 3:
Cookies werden nicht von jedem Browser unterstützt.
Der Netscape Navigator bietet diese Option an, Konqueror und MS Internet Explorer nur bei über HTTP-Protokoll übertragenen Dateien. Das reicht aber in der Regel aus, wer will schon Cookies für lokale Seiten setzen? Falls diese Seite also lokal gespeichert und im Konqueror oder MSIE betrachtet wird, funktioniert das Cookie höchstwahrscheinlich nicht, bei Betrachtung über das Netz wahrscheinlich schon.
Bei Cookies handelt es sich im Prinzip nur um Zeichenketten, die der Browser nach Gutdünken irgendwo lokal abspeichert und beim erneuten Laden einer Seite serverabhängig wieder hervorholt.
Verwendet man verschiedene Browser, wissen die unterschiedlichen Anwendungen natürlich nichts von den Cookie-Abspeicherungen der jeweils anderen Programme.
Cookies stellen also prinzipiell kein Sicherheitsrisiko dar, lediglich etwas Festplattenplatz wird belegt.

Geschrieben werden Cookies einzeln in der Form
document.cookie=Name+"="+Inhalt+"; expires="+Verfallsdatum+";";.
Name und Inhalt dürfen beliebige Zeichenketten enthaltende Variablen sein, expires ist ein fester Ausdruck und der Verfallsdatum-String sollte mittels Date.toGMTString() erzeugt werden.
Man kann auf ein Verfallsdatum verzichten, dann gilt das jeweilige Cookie bis das Browserprogramm beendet wird.

Beim Auslesen hat document.cookie die Form "Name1=Inhalt1; Name2=Inhalt2; ...; NameX=InhaltX".
Es sind also alle jemals in Verbindung mit dem aktuellen Server geschriebene Cookies aufgelistet und durch Semikolon getrennt, die Verfallsdaten werden weggelassen.

HTML-Quelltext im Head-Bereich:
<!-- cookie.js laden: -->
<script type="text/javascript" src="cookie.js"></script>
<!-- seitenspezifische Funktionen: -->
<script type="text/javascript">
<!--
function FillForm()
/* Formularfelder mit Keks vollkruemeln */
{
  document.persoenlich.inhalt1.value=GetCookieValue("inhalt1");
  document.persoenlich.inhalt2.value=GetCookieValue("inhalt2");
  document.persoenlich.inhalt3.value=GetCookieValue("inhalt3");
}

function ReadForm()
/* Keks aus Formularfeldern zusammenbacken */
{
  SetCookieValue("inhalt1",document.persoenlich.inhalt1.value);
  SetCookieValue("inhalt2",document.persoenlich.inhalt2.value);
  SetCookieValue("inhalt3",document.persoenlich.inhalt3.value);
}
//-->
</script>

HTML-Quelltext im Body-Bereich:
Eintrag im Body-tag:
onLoad="FillForm()"

Formularabschnitt:
<form name="persoenlich">
<table cellpadding="5" cellspacing="1" border="0">
<tr><th style="background:#D0F0D0">
Inhalt 1:
</th><td style="background:#A0E0A0">
<input type=text name="inhalt1" size="50">
</td></tr><tr><th style="background:#D0F0D0">
Inhalt 2:
</th><td style="background:#A0E0A0">
<input type=text name="inhalt2" size="50">
</td></tr><tr><th style="background:#D0F0D0">
Inhalt 3:
</th><td style="background:#A0E0A0">
<input type=text name="inhalt3" size="50">
</td></tr>
<tr><th colspan="2" style="background:#D0F0D0">
<input type=button value="Cookie setzen" onClick="ReadForm()">
</th></tr>
</table>
</form>

Quelltext von cookie.js:
hoch runter
var Count=0;
var AlreadyRead=0;
var Names=Array();
var Values=Array();
var ReplaceArray=Array("\\",";","="," ","\n","\r","\t");
hoch runter
/* ----> String-Umwandlungen,
   um Steuerzeichen aus Cookie-Eintraegen herauszufiltern */
hoch runter
function CookieStringEncode(InText)
/* entschaerft Steuerzeichen */
{
  var OutText="",i,j,number;
  for (i=0;i<InText.length;i++)
  {
    number=-1;
    for (j=0;j<ReplaceArray.length;j++)
    {
      if (InText.charAt(i)==ReplaceArray[j])
        number=j;
    }
    if (number==-1)
      OutText=OutText+InText.charAt(i);
    else
      OutText=OutText+"\\"+number;
  }
  return OutText;
}
hoch runter
function CookieStringDecode(InText,begin,end)
/* schaerft Steuerzeichen */
{
  var OutText="",NumText="",i,j,number;
  for (i=begin;i<end;i++)
  {
    if (InText.charAt(i)=="\\")
    {
      i++;
      NumText=""+InText.charAt(i);
      OutText=OutText+ReplaceArray[parseInt(NumText)];
    }
    else
      if (InText.charAt(i)!=" ")
        OutText=OutText+InText.charAt(i);
  }
  return OutText;
}
hoch runter
/* ----> eigentliche Cookie-Manipulationsfunktionen */

function ReadCookie()
/* wertet alle Eintraege des Cookies aus */
{
  var i,NameBegin=0,NameEnd=-1,ValueBegin=-1,ValueEnd=-1;
  var Text,Cont=1;
  AlreadyRead=1;
  Count=0;
  Names.length=0;
  Values.length=0;
  if (document.cookie)
  {
    Text=document.cookie;
    for (i=0;i<=Text.length;i++)
    {
      if ((i<=Text.length)&&(Text.charAt(i)=="=")&&(NameEnd<0))
      {
        NameEnd=i;
	ValueBegin=i+1;
      }
      if ((i==Text.length)||(Text.charAt(i)==";"))
      {
        ValueEnd=i;
	if (NameEnd>=0)
	{
	  Names[Count]=CookieStringDecode(Text,NameBegin,NameEnd);
	  Values[Count]=CookieStringDecode(Text,ValueBegin,ValueEnd);
	  Count++;
	}
	NameBegin=i+1;
	NameEnd=-1;
	ValueBegin=-1;
	ValueEnd=-1;
      }
    }
  }
}
hoch runter
function GetCookieNumber(name)
{
  var i;
  for (i=0;i<Count;i++)
    if (name==Names[i])
      return i;
  return -1;
}
hoch runter
function GetCookieValue(name)
/* ermittelt den Wert eines Cookie-Eintrages */
{
  if (!AlreadyRead)
    ReadCookie();
  var number=GetCookieNumber(name);
  if (number>=0)
    return Values[number];
  return "";
}
hoch runter
function SetCookieValue(name,value,millisec)
/* setzt den Wert eines Cookie-Eintrages und dessen Gueltigkeitsdauer */
{
  if (!millisec)
    millisec=1000*60*60*24*366;
  var Now=new Date();
  var EndTime=new Date(Now.getTime()+millisec);
  document.cookie=CookieStringEncode(name)+"="+CookieStringEncode(value)
                  +"; expires="+EndTime.toGMTString()+";";
  ReadCookie();
}


Autor: Ulrich Kritzner