Autor Sergy Alpin
*Die Rechtschreibung im Artikel
kann fehlerhaft sein, aber Java, JavaScript, HTML - Quelltexten sind fehlerfrei.
Wenn Sie für Ihre Unternehmens- oder private Webseiten beschäftigt sind, dann wissen Sie bereits, daß für ein gutes Interneteintritt einen Benutzererkennungseffekt sehr wichtig ist.
Es gibt etwas starke in dem Effekt. Wenn Benutzer auf anderem Ende des Welt erkannt wird, dann vergießt er es nie.
Es ist für mich ein Wunder gewesen, wenn ich am Februar 1997 bei zweitem Besuch auf Al Acro JavaLand Webseiten (http://www.cityknights.net/alacro/) eine Meldung gemerkt habe, die sagte zum mir etwa: "Du bist zweite mal bei mir. Findest Du meine Seiten so interessant?"
Und wenn es bei Ihnen um ein virtuellen
Kaufhaus geht oder wenn Sie exotische Elementen wie VRML - Welten oder
Plug-ins in Ihre Seiten implementiert wollen, dann ist Browser - Erkennung
für Sie dringend empfohlen.
1. Kein Kaffe ohne Cookies...
Einfacher Weg, um einen konkreten Benutzer
zu identifizieren, ist die Client - PC Variable Cookie zu nutzen.
Die Cookie ist bei Netscape Browser in eine Datei Namens cookies.txt
unter Netscape - Verzeichnis auf Festplatte gespeichert. (cookies.txt
- Abbildung 1). Internet Explorer speichert jede Cookie in eine
einzelne Datei in Windows - Verzeichnis.
Abbildung 1
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html # This is a generated file! Do not edit. www.snafu.de FALSE /~alpin FALSE 946684799 visits_to_me 37 |
Wenn ein Browser meine Seite, wo cookie JavaApplet implementiert ist, besucht, bekommt er in Cookie eine Zeile mit dem Inhalt:
www.snafu.de FALSE /~alpin FALSE 946684799 visits_to_me 1
Das macht Server mit der Befehlszeile in HTTP-Header, die in allgemeinem Fall so aussieht:
Set-Cookie: NAME =VALUE; expires= DATE IN GMT FORMAT; path=PATH; domain= DOMAINNAME; secure
Erklärung für cookies - Parametern finden Sie in der Tabelle 1.
Um die Zeile
www.snafu.de FALSE /~alpin FALSE 946684799 visits_to_me 1
in der Datei cookies.txt zu erzeugen,
muß Server Befehlszeile
Set-Cookie: visits_to_me =1; expires=
Friday, 31-Dec-99 23:59:59 GMT;
an Browser senden. Optionale Parametern,
die nicht eingegeben sind, generiert Server automatisch.
Tabelle 1
cookie - Parameter | Bedeutung | Beispielswert | Bemerkung |
NAME | identifiziert das cookie - Zeile (String) | visits_to_me | Eingabe erforderlich |
VALUE | ein beliebiges String | 1 | Eingabe erforderlich |
expires | Datum in GMT Format. Wenn Datum verlaufen ist, löscht Browser die Zeile | expires =Friday, 31-Dec-99 23:59:59 GMT; in cookies.txt ist Datum in verschlüsselte Form wie 946684799 darstellt | optional
|
path | Nur die Servern, deren Domainname Parameter domain und Pfad - path entsprechen, dürfen diese cookie - Zeile lesen und ändern* | path=/~alpin | optional |
domain | Server Domainname kann vollständig oder verkürzt sein | domain= www.snafu.de
oder domain=.snafu.de |
optional |
secure | Wenn die Schlüsselwort secure in cookie eingegeben wird, dann darf die Cookie nur mit „Secure Socket Layers" durch Netz übertragen. Ohne Eingabe überträgt sich Cookie in unverschlüsselte Form | optional |
Wenn eine Webseite, wo cookie JavaApplet implementiert ist, in Browser erscheint, liest Applet die Datei cookies.txt durch, findet Zeile mit NAME visits_to_me und nachfolgendem VALUE - Wert (zum Beispiel 1). Dann addiert Applet zu dem Wert 1, schreibt in Applets - Bereich „Hi, thanks for Your 2 visit(s) on this pages!" und schreibt die Zeile mit neuem VALUE - Wert in cookies.txt über.
Wenn Cookie - Zeile mit dem NAME visits_to_me nicht vorhanden ist, erzeugt Applet die Zeile und begrüßt den neuen Gast mit erstem Besuch.
Erscheinungspunkten von JavaScript - Objekt sind die Zeilen 53 und 62 (sehe Quelltext - Abbildung 2).
In Zeile 53 liest JavaScript - Objekt cookies.txt und speichert sein Inhalt in String cookie.
In Zeile 62 schreibt das Applet
mittels JavaScript - Objektes neue Zeile - Inhalt in cookies.txt.
ein Text - Editor wie Notepad;
Java Developers Kit 1.0.2, das
Sie von der Seite http://java.sun.com/products/JDK/1.0.2/
herunterladen können;
Classen - Bibliothek java_301,
die als java_301 - Datei in Netscape
Navigator 3.0 Gold - Verzeichnis ist.
Installieren Sie Java Developers Kit 1.0.2 in die Verzeichnis zum Beispiel C:/java/. Kopieren Sie die Datei java_301 in Verzeichnis C:/java/lib/. Erzeugen Sie eine neue Verzeichnis C:/Cookie/.
Öffnen Sie eine neue Datei Namens cookie.java in Notepad.
Nehmen Sie cookie.java Quelltext
(Abbildung 2) mit Cut & Paste - Technologie. Demnächst
besuchen Sie auch meine Webseite http://www.snafu.de/~alpin/sources.html
, wo einige meine andere Quelltexte stehen. Um sie zu nutzen, brauchen
Sie einen Paßwort.
Abbildung 2
//javac -classpath C:/java/lib/classes.zip;C:/java/lib/java_301
cookie.java //1
import java.io.*; //2 import java.util.*; //3 import java.awt.*; //4 import java.applet.*; //5 import netscape.javascript.JSObject; //6 import netscape.javascript.JSException; //7 public class cookie extends Applet { //8 String Author; //9 StringBuffer cookietext =new StringBuffer(); //10 String KeyText="visits_to_me="; //11 String VisitsText = new String(); //12 String rasdelitel=";"; //13 public void init() { //14 Author = getParameter("Author"); //15 setBackground(Color.black); //16 } //17 public void start() { //18 String Text=";expires=Friday, 31-Dec-99 23:59:59 GMT"; //19 readCookie(rasdelitel); //20 if (key(KeyText, rasdelitel).equals("0")) VisitsText="1"; //21 else { //22 Integer Visits= new Integer (key(KeyText, rasdelitel)); //23 int i = Visits.intValue(); //24 i++; //25 VisitsText = VisitsText.valueOf(i); //26 } //27 Text= KeyText+VisitsText+Text; //28 writeCookie(Text); //29 repaint(); //30 } //31 public void paint (Graphics g){ //32 Font f= new Font("TimesRoman",Font.BOLD,15); //33 g.setFont(f); //34 g.setColor (Color.green); //35 String Meldung ="Hi, thanks for Your "+VisitsText+" visit(s) on this pages!"; //36 Dimension dim; //37 int appHoehe; //38 int appBreite; //39 dim=size(); //40 appHoehe = dim.height; //41 appBreite = dim.width; //42 FontMetrics fm = g.getFontMetrics(); //43 int strBreite = fm.stringWidth(Meldung); //44 int strHoehe = fm.getHeight(); //45 int xPos = (appBreite - strBreite)/2; //46 int yPos = (appHoehe+strHoehe)/2-3; //47 if (Author.equals("Ihre Name")) //48 g.drawString(Meldung,xPos,yPos); //49 } //50 public void readCookie(String rasdelitel){//51 try { //52 String cookie =(String)JSObject.getWindow (this).eval ("document.cookie"); //53 StringTokenizer st = new StringTokenizer(cookie, ";", false); //54 while (st.hasMoreTokens()) { //55 cookietext.append (st.nextToken().trim() +rasdelitel); //56 } //57 } catch (Exception ex) {} //58 } //59 public void writeCookie(String Text){ //60 try { //61 JSObject.getWindow (this).eval ("document.cookie ='" +Text+"';"); //62 } //63 catch (Exception ex) { } //64 } //65 public String key(String KeyText, String rasdelitel) { //66 int nachalo = cookietext.toString().indexOf(KeyText); //67 int konez = cookietext.toString().indexOf(rasdelitel,nachalo); //68 if(nachalo !=-1) return cookietext.toString().substring(nachalo+16, konez); //69 else return "0"; //70 } //71 }//72 |
In Zeile 20 (sehe Quelltext - Abbildung 2) ruft Applet die Funktion readCookie(String rasdelitel) mit einem Parameter „;", der Trennzeichen in Cookie bezeichnet. Die Funktion speichert in StringBuffer cookietext alle Paaren NAME=VALUE, die Server aus cookies.txt lesen kann.
In Zeilen 21-26 wird Wert für VisitsText definiert. In Zeile 21 wird in if - Anweisung Funktion key(String KeyText, String rasdelitel) aufgerufen, die aktuelle VALUE von cookie mit NAME „visits_to_me=" als String ermittelt und als String zurück liefert.
Wenn Browser erste mal die Seite besucht, ist VALUE = „0" und String VisitsText gleich „1" wird. Wenn VALUE ungleich „0" ist, dann erhöht sich VALUE in Zeilen 23-26 auf +1 und in VisitsText gespeichert wird.
Einschließlich bildet sich in Zeile 28 ein neuen Text für cookie - Zeile, der in Zeile 29 Funktion writeCookie(Text) in cookies.txt schriebt.
In Zeile 30 aufgerufene Methode repaint()
bildet neuen Aussicht von cookie JavaApple:
in Zeile 36 wird String Meldung
definiert, der VisitsText enthält;
in Zeile 49 wird Meldung als String
geschrieben.
Speichern Sie Datei cookie.java in C:/Cookie/.
Öffnen Sie MS-DOS-Eingabeaufforderung - Fenster und wechseln Sie Verzeichnis nach C:/Cookie/.
Kompilieren Sie cookie.java mit dem Befehl:
javac -classpath .;C:/java/lib/classes.zip;C:/java/lib/java_301 cookie.java
Das classpath C:/java/lib/java_301 benötigt Java - Compiler, um Packages netscape.javascript.JSObject und netscape.javascript.JSException aus Classen - Bibliothek java_301 zu exportieren.
Java - Compiler erzeugt cookie.class - Datei in C:/Cookie/ Verzeichnis.
Um cookie JavaApplet zu testen, werden wir eine HTML - Datei (Abbildung 3) brauchen, die einen Applet - Tag enthält.
Abbildung 3
<HTML>
<applet code = "cookie.class" width=500 height=22 mayscript = true> <param name = Author value = "Ihre Name"> </applet> </HTML> |
In Netscape Communicator schalten Sie „Accept
all cookies" im Menü Edit/Preferences/Advanced ein, öffnen Sie
mit dem Netscape mycookie.html und lesen Sie Begrüßung: „Hi,
thanks for Your 1 visit(s) on this pages!".
2. Netscape, Internet Explorer... wer bist Du?
Die verschiedene auf dem Markt vorhandene Browser haben so unterschiedliche Möglichkeiten, daß zu einem gutem Internet - Stil gehört, die zu checken. Zum Beispiel, wenn Sie Java - Applets auf Ihre Webseiten anbieten wollen, es ist wichtig zu wissen, ob Besuchers Browser Java vollständig unterstützt.
Die Eigenschaften von JavaScript Objekt navigator erlauben Ihrem Server einige Browsers Charakteristiken zu erfahren.
Wenn Sie die Datei mit folgendem HTML - Text (Abbildung 4) in Ihr Browser öffnen, dann wird die Tabelle angezeigt (Abbildung 5).
Abbildung 4
<HTML><BODY>
<SCRIPT LANGUAGE="JAVASCRIPT"> <!-- HTML="<TABLE BORDER=1><TR VALIGN=TOP>"+ "<TD>1"+"</TD>"+ "<TD>navigator.appCodeName"+"</TD><TD>"+navigator.appCodeName+"</TD></TR>"; HTML=HTML+"<TR VALIGN=TOP>"+ "<TD>2"+"</TD>"+ "<TD>navigator.appName"+"</TD><TD>"+navigator.appName+"</TD></TR>"; HTML=HTML+"<TR VALIGN=TOP>"+ "<TD>3"+"</TD>"+ "<TD>navigator.appVersion"+"</TD><TD>"+navigator.appVersion+"</TD></TR>"; HTML=HTML+"<TR VALIGN=TOP>"+ "<TD>4"+"</TD>"+ "<TD>navigator.userAgent"+"</TD><TD>"; if (navigator.appName=="Netscape"){ for (i=0;i<navigator.userAgent.length;i++){ HTML=HTML+navigator.userAgent[i]; } } else HTML=HTML+navigator.userAgent; HTML=HTML+"</TD></TR>"; HTML=HTML+"</TABLE>"; document.writeln(HTML); //--> </SCRIPT>
|
Abbildung 5**
1 | navigator.appCodeName | Mozilla | Codenamen eines WWW-Browsers* |
2 | navigator.appName | Netscape | Name* |
3 | navigator.appVersion | 4.01 [en] (Win95; I) | Version und die Betriebssystemplattform Browsers* |
4 | navigator.userAgent | Mozilla/4.01 [en] (Win95; I) | Daten des verwendeten Browser wie sie im HTTP-Protokoll an den aufgerufenen Server übermittelt werden* |
Die Browser Eigenschaften könnten Sie zum Beispiel zu wissen brauchen, um auf Ihre Webseite zu entscheiden, ob ein Java Applet richtig in diesem konkretem Browser darstellt wird.
Folgendes Beispiel (Abbildung 6) testet, ob Browser ein Netscape ist. Wenn Antwort „Ja" ist, dann wird cookie JavaApplet in Ihre Webseite implementiert.
Abbildung 6
<HTML><BODY>
<SCRIPT LANGUAGE="JAVASCRIPT"> <!-- HTMLOK="<applet code = 'cookie.class' width=500 height=22 mayscript = true><param name = Author value = 'Ihre Name'></applet>"; HTMLNO="Hallo, "+ navigator.appName+"!"; if (navigator.appName=="Netscape"){ document.writeln(HTMLOK); } else document.writeln(HTMLNO); //--> </SCRIPT> </BODY></HTML> |
3. Schmeckt ein Plug-in dem Browser?...
Was passiert, wann World Wide Web Boom zum Ende ist? Als einen WWW - Browser eine ganz gewöhnliche Teil von Fernseher wird, was wird in PC - Welt für professionelle Nutzung als Erinnerung über heutige Netscape, Internet Explorer und andere Web - Anwendungen bleiben? Einige Leute glauben, daß die Entwicklung von Plug-ins für Netscape oder ActiveX für Internet Explorer einen Weg von jetzigen Browser zu Web - Anwendungen der Zukunft ist.
Mehr über Plug-ins und wie könnte Ihr Server erkennen, welche Plug-ins und MIME (Multipart Internet Mail Extension) Typen Browser unterstützt, erfahren wir bald in nächstem Artikel.