Cookies verwenden - Beispiel für JavaScript-Programmierung
|
|
|
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:
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:
var Count=0;
var AlreadyRead=0;
var Names=Array();
var Values=Array();
var ReplaceArray=Array("\\",";","="," ","\n","\r","\t");
|
/* ----> String-Umwandlungen,
um Steuerzeichen aus Cookie-Eintraegen herauszufiltern */
|
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;
}
|
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;
}
|
/* ----> 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;
}
}
}
}
|
function GetCookieNumber(name)
{
var i;
for (i=0;i<Count;i++)
if (name==Names[i])
return i;
return -1;
}
|
function GetCookieValue(name)
/* ermittelt den Wert eines Cookie-Eintrages */
{
if (!AlreadyRead)
ReadCookie();
var number=GetCookieNumber(name);
if (number>=0)
return Values[number];
return "";
}
|
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
|