cookies
ein paar fragen zum dem beispiel:
1 <html>
2 <head>
3 <script language="JavaScript">
4 function GetCookie (name) {
5 var arg = name + "=";
6 var alen = arg.length;
7 var clen = document.cookie.length;
8 var i = 0;
9 while (i < clen) {
10 var j = i + alen;
11 if (document.cookie.substring(i, j) == arg)
12 return getCookieVal (j);
13 i = document.cookie.indexOf(" ", i) + 1;
14 if (i == 0) break;
15 }
16 return null;
17 }
18 function SetCookie (
19 name, value, expires, path, domain, secure) {
20 document.cookie = name + "=" + escape (value) +
21 ((expires) ? "; expires=" + expires.toGMTString() : "") +
22 ((path) ? "; path=" + path : "") +
23 ((domain) ? "; domain=" + domain : "") +
24 ((secure) ? "; secure" : "");
25 }
26 function getCookieVal (offset) {
27 var endstr = document.cookie.indexOf (";", offset);
28 if (endstr == -1)
29 endstr = document.cookie.length;
30 return unescape(document.cookie.substring(offset, endstr));
31 }
32 function schreibeCookie() {
33 haltbarDatum = new Date(2007,11,31,1,0,0);
34 document.cookie = SetCookie(
35 "user", document.mF.id.value, haltbarDatum);
36 document.cookie = SetCookie(
37 "pw", document.mF.pw.value, haltbarDatum);
38 }
39 function leseCookie() {
40 wert = GetCookie("user");
41 if(wert != null) document.mF.id.value=wert;
42 wert = GetCookie("pw");
43 if(wert != null) document.mF.pw.value=wert;
44 }
45 </script></head><body onload="leseCookie()">
46 <form name="mF" onsubmit="schreibeCookie()">
47 <table>
48 <tbody><tr><td>Userid</td>
49 <td><input name="id"></td></tr>
50 <tr><td>Passwort</td>
51 <td><input name="pw" type="password"></td></tr>
52 <tr><td><input value="Ok" type="submit"></td>
53 <td> <input value="Abbruch" type="reset"></td></tr>
54 </tbody></table>
55 </form>
56 </body></html>
a) was gibt ,,document.cookie.length,, zurück.
von was wird da die länge zurückgegeben ?
b) kann man anstelle von ,,offset,, auch ein anderes wort hinschreiben ? ist doch nur ein beliebiges wort ?
c) kann man theoretisch alle variablen mit ,,var,, davor schreiben ?
d) was wird aus ,,document.cookie.substring(0,5),, zurückgegeben ?
ich weiss ,dass es eine extrahierte zeichenkette zurückgibt, aber welche ?
hier wird z.B konkret ,,schiff,, extrahiert : var begriff = "dampfschifffahrt"
var teil = begriff.substring(5,11)
e) was ist ,,document.cookie,, in zeile 20 ? der schreibweise nach eine variable,oder ?
f)was wird in zeile 13 zurückgegeben ? was bedeutet " " ? wird da ermittelt an wie vielter stelle das " " vorkommt ?
g) in zeile 14 wird die while schleife abgebrochen wenn ,,i,, gleich ,,0,, ist , richtig ?
( da ist dann die variable in zeile 13 gemeint ? )
h) ,,function GetCookie,, und ,,function SetCookie,, sind nur vorgaben,so eine art schablone, mit denen dann
die anderen funktionen arbeiten, richtig ?
i) sind ,,GetCookie,, und ,,SetCookie,, nur beliebige funktionsnamen?
j) was gibt ,,function GetCookie,, in der webseite ,als ergebnis der funktion, zurück ?
danke
Antwort schreiben
Antwort 21 von Sysiphos vom 16.11.2019, 21:09 Options
Bitte such dir eine einfachere Beispielaufgabe für den Anfang. Die Methode "Learning by Doing" ist prinzipiell zwar zu empfehlen, allerdings versuchst du zuviel Schritte auf einmal zu nehmen. Deine Fragen zeigen, dass du noch nicht bereit bist um dieses spezielle Programm zu durchdringen, da dir einfach Grundlagen (zB Arrays) fehlen und du andererseits dich in SelfHTML als dem Standard-Nachschlagewerk noch nicht gut genug auskennst um Lesetipps zu folgen. Genau genommen bist du noch nicht einmal fähig, deine Fragen so zu formulieren, dass klar wird, wo genau dein Problem jeweils liegt.
Nichts für ungut, aber als Lehrer würde ich dir genau dies in eine Beurteilung schreiben.
Antwort 22 von karim vom 23.11.2019, 17:21 Options
zu 3) b)(antwort 17) als ich fragte: was wird in zeile 4 gemacht ?
die antwort darauf war : der Wert wird überschrieben mit dem 2ten Element eines Arrays, das entsteht, wenn man auf die Cookie-Zeichenkette die Funktion split anwendet. Lies dazu bei split() nach!
dann fragte ich wieder : warum wird da ein wert überschrieben, ich dachte wenn da steht document.cookie, ist das der gesmte inhalt des cookies, also, name, wert, expires ... ?
die antwort darauf war : der Wert wird überschrieben mit dem 2ten Element eines Arrays, das entsteht, wenn man auf die Cookie-Zeichenkette die Funktion split anwendet. Lies dazu bei split() nach!
a) aber mit split wird doch nichts überschrieben , dafür gibt es doch andere reservierte wörter zum überschreiben,z.b. replace () !?
split , teilt die zeichenkette nur auf, oder ?
1) 1 <script language="JavaScript">
2 function CookieLesen(){
3 Wert = "";
4 if(document.cookie) {
5 Wertstart = document.cookie.indexOf("=") + 1;
6 Wertende = document.cookie.indexOf(";");
7 if(Wertende == -1) Wertende = document.cookie.length;
8 Wert = document.cookie.substring(Wertstart,Wertende);
9 }
10 return Wert;
11 }
12 </script>
a) welche variable ist gemeint in zeile 10, die aus zeile 3 oder 11 ?
b) wenn ,, if(document.cookie),, true ergibt (also cookie ist vorhanden), dann wird alles von von zeile 5 b is 8 ausgeführt , richtig ?
c) wenn ein cookie vorhanden ist, dann wird ,,return Wert,, nicht ausgeführt , richtig?
2) document.cookie = 'meincookie=meinwert; expires=Thu, 01-Jan-70 00:00:01 GMT;';
a) was liefert ,,document.cookie.length,, oben als ergebnis zurück ?
b) ist der wert des cookies nur ,,meinwert,, oder alles was hinter ,,document.cookie =,, steht ? steht ?
( so weit ich weiss ist der name des cookies ,,meincookie,, (bezeichner) , richtig ?
3) warum wird in zeile 5 ,,+1,, geschrieben , was wird da dazugezählt ?
Übrigens , ich konnte auf diese fragen keine konkreten antworten finden, weder bei galileo noch bei selfhtml. Dort steht z. b. nicht ,warum oben in zeile 5 am ende ,,+1,, steht ?Solche dinge muss ich halt fragen, denn ich bin dabei javascript zu erlernen ?
Dafür ist doch das forum da ,damit unter anderem, einem geholfen wird .
Danke
Antwort 23 von sysiphos vom 24.11.2019, 10:21 Options
Zitat:
aber mit split wird doch nichts überschrieben
wurde auch nicht behauptet.
wenn ich schreibe:
var x="bla";
var y="blub1 blub2 blub3";
var z=y.split(" ");
x=z[1];
überschreibe ich den Wert "bla" der Variable x mit dem 2ten Element des Arrays z, das entstanden ist durch y.split().
x hat jetzt den Wert "blub2".
Nirgendwo stand, dass split etwas überschreibt!
a) beide! Das ist ein und dieselbe Variable, die nimmt bloß verschiedene Werte an.
b)ja
c)falsch! return Wert wird immer ausgeführt. Achte auf die Klammerungsreihenfolge!
2) a) bitte probiere das doch einfach selbst aus! Schreib einfach wenn du das Beispiel geladen hast
javascript:alert(document.cookie.length)
in die Browseradresszeile. Auf die Weise kannst du dir immer irgendwelche Werte einfach ausgeben lassen.
b) auch das ließe sich doch mit einfachem Probieren herausfinden:
javascript:alert(document.cookie)
c) document.cookie.indexOf("=") liefert die Stelle des = in der Zeichenkette, interessieren tut aber nur das dahinter, also ab der nächsten Stelle (=+1). Meht Infos erhältst du wenn du mit den Beispielskripten zu indexOf ein bisschen spielst - egal in welchem JavaScript-Online-Buch.
Zitat:
Dafür ist doch das forum da ,damit unter anderem, einem geholfen wird .
sicherlich. Aber wie schon erwähnt kann ein Forum fehlendes Grundlagenwissen keinesfalls ersetzen!
Zitat:
keine konkreten antworten
natürlich nicht! Wenn du die genannten Materialien einfach vom Anfang an durcharbeitest ergeben sich solche Fragen kaum. Die Autoren haben nicht damit gerechnet, dass du versuchst das Pferd von hinten aufzuzäumen.
Du versuchst alles auf das leidige Thema cookies zu fixieren, anstatt erst einmal die Funktionen, die hier verwendet werden, ohne diesen Zusammenhang kennen zu lernen. Dir fehlt Grundwissen im Themenbereich Stringverarbeitung. Da cookies nichts anderes als Strings (=Zeichenketten) sind, kommst du so natürlich nur schwer weiter.
Antwort 24 von karim vom 24.11.2019, 22:44 Options
ich hoffe doch , dass ich noch weiter fragen stellen darf ?
Antwort 25 von karim vom 26.11.2019, 14:29 Options
FA)
Zu 1) a) also , so wie ich das weiss, kann eine variable nur einen wert haben, mir ist schon klar, dass die variable einen anderen wert annehmen kann, aber letztendlich hat sie dann immer nur einen wert. Welcher wert der variablen ,,wert,, in zeile 10, wird da jetzt zurückgegeben ist das jetzt, der aus zeile 3 oder 8 ?
Ich nehme mal an,der aus zeile 8, da die variable einen anderen wert angenommen hat,es gilt also der letzte wert den die variable angenommen hat,und in zeile 8 ist der letzte, oder !?
Zu 1) b) wenn ,,return wert,, immer ausgeführt wird , unabhängig davon was in den zeilen davor passiert, warum lässt man dann die zeilen 4 – 8 nicht weg , sind doch dann überflüssig, da dann sowieso immer ,,return wert,, eine leere zeichenkette zurückgegeben wird, es ei denn die variable wert nimmt den wert aus zeile 8 an (siehe frage 1)a) ?
2) ,,wert =“ “,, ist nur dazu da , damit wenn kein cookie vorhanden ist, dann ,,return wert,, eine leere zeichenkette zurückgibt, richtig ?
Antwort 26 von sysiphos vom 26.11.2019, 15:20 Options
1a) je nachdem ob die if-bedingung zutrifft oder nicht, dafür gibt es die doch!
1b) eben!
Bitte prüfe doch mal gedanklich, wann die if-Bedingung erfüllt ist und was dann passiert. Anschließend was passiert, wenn sie nicht erfüllt ist.
2 ergibt sich daraus!
Antwort 27 von karim vom 04.12.2019, 15:05 Options
1 function Schreiben(n,w,e){
2 var a = new Date();
3 a = new Date(a.getTime() +e);
4 document.cookie = n+'='+w+'; expires='+a.toGMTString()+';';
5 }
6 function Lesen(n){
7 a = document.cookie;
8 res = '';
9 while(a != '') {
10 cookiename = a.substring(0,a.search('='));
11 cookiewert = a.substring(a.search('=')+1,a.search(';'));
12 if(cookiewert == '')
13 {cookiewert = a.substring(a.search('=')+1,a.length);}
14 if(n == cookiename){res = cookiewert;}
15 i = a.search(';')+1;
16 if(i == 0){i = a.length}
17 a = a.substring(i,a.length);
18 }
19 return(res)
20 }
21 function Loeschen(n){
22 document.cookie = n+'=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
23 }
24 text = 'Willkommen %1 auf unserer Homepage!';
25 function NameMerken(){
26 a = prompt('Hallo Besucher. Bitte geben Sie Ihren Namen ein.');
27 Schreiben('username',a,1000*60*60*24*365);
28 NameHolen();
29 }
30 function NameHolen(){
31 if(document.cookie) {
32 username = Lesen('username');
33 if(username != ''){
34 b = text.replace('%1',username);
35 document.writeln(b);
36 }
37 }
38 else{NameMerken()
1) kann z.b. ,,function NameHolen(),, vor ,,function Lesen(n),, stehen , oder muss alles im script immer eine reihenfolge haben, oder muss man nur bei funktionen eine einhalten, wie ist das generell bei javascript ?
2) was bedeutet das anführungszeichen: while(a != '') , muss man das nicht so schreiben while(a != “ ”) ( leere zeichenkette)
3) ist die variable var a = new Date(); nur in der funktion gültig ? ich denke ja .
4 ) man hat verschiedene möglichkeiten mit stringmethoden und eigenschaften cookies zu setzen und zu lesen, generell, mit cookies zuarbeiten, stimmt das ?
5) warum muss ,,=,, in anführungsstrichen stehen, normalerweise steht bei substring nichts in klammern (substring()) ? cookiename = a.substring(0,a.search('='));
6) kann man in zeile 35 anstatt writeIn auch nur write schreiben ?
7)document.cookie = n+'='+w+'; expires='+a.toGMTString()+';'; (zeile 4) document.cookie = n+'=; expires=Thu, 01-Jan-70 00:00:01 GMT;'; (zeile 22)
a) das expires (zeile 4) wird von expires (zeile22) überschrieben, richtig ? (datum wird nur zurückgesetzt, falls die funktion aufgerufen wird,nur dann)
cool.gif warum wird ,,n,, (wenn überhaupt) auch überschrieben ? (zeile 22)
c) wozu braucht man ,,n+,, und lässt ,,w,, weg (zeile22) ?
d) warum steht '=; expires=Thu, 01-Jan-70 00:00:01 GMT;' in anführungsstrichen ? nur weil es eine zeichenkette ist ?
e) wenn da etwas überschrieben wird in zeile 22, dann wird aus ,,n,, Hans ( falls das der name ist), das heisst dann nur in gedanken : document.cookie = Hans=; expires=Thu, 01-Jan-70 00:00:01 GMT;'; (zeile 22) , richtig ? aber dann hat Hans keinen wert ?
8) warum wird nirgendwo ,,function Loeschen(n),, aufgerufen ? braucht man das überhaupt ?
9) warum schreibt man ,,res,, in klammern,geht’s auch ohne ? (zeile 19)
10) <input type="button" value="Zufallszahl" onClick=" alert( Math.round(Math.random()*48+1) ); ">
Es werden bei diesem beispiel nur zahlen zwischen 1 und 48 ausgegeben ,( so steht es in einem online-kurs)?
1 * 48 + 1 = 49 und einmal 0 * 48 + 1 = 1 . nach meiner berechnung werden also zahlen zwischen 1 und 49 ausgegeben und nicht 1 und 48,oder ? !
danke im voraus
Antwort 28 von Sysiphos vom 04.12.2019, 16:13 Options
1 ist egal
2 das sind 2 einfache Anführungszeichen!
3 ja, innerhalb einer Funktion mit var deklarierte Variabeln sind lokal
4 sicher
5 das = ist hier Argument von search() und da muss es als Zeichen in " stehen
6 ja. beides sollte vermieden werden!
7a-c Wichtig ist nur, dass n überhaupt erwähnt ist, damit der browser mitkriegt um welches Cookie es sich dreht.
d ja
e Hans wird gelöscht mit einem Datum in der Vergangenheit. Eine Wertzuweiseung ist somit egal.
8 brauchst du zum Löschen des cookies (siehe 7e).
9 ja
10 Richtig, es kommen 1-49 vor, aber nicht gleich verteilt. 1 und 49 zu erhalten ist halb so wahrscheinlich wie jede andere Zahl.