Cookie - zeigt alten wert an obwohl neuer drin ist

Hi,

mein Problem:

ich schicke eine ID von Frame1 an Frame2, über diese ID wird ein Wert aus einem Array gelesen, dieser Wert ist dann die Id einer Tabelle, die erzeugt wird.

Beim ersten aufruf soll die Tabelle auf unsichtbar gesetzt werden, den Status der Tabelle speicher ich in Cookies.

Beim ersten Aufruf der Seite (noch keine ID vorhanden) schreib ich meine Cookies:

$subid ist die ID der jeweiligen Tabelle

if($id=="" or $id==0)
{
echo " document.cookie = escape(".$subid.") + ‚=‘ + escape(‚none‘); ";
}

dann beim erzeugen der Tabelle weiter unten im Code:

#wenn die Id mit dem Wert der Id der Tabelle übereinstimmt
if($id==$subid)
{
#schaut nach welcher Wert gerade für die Tabelle im Cookie steht
if($_COOKIE[$subid]==„none“)
{
echo " document.cookie = escape(".$subid.") + ‚=‘ escape(‚block‘)";
}
else
{
echo " document.cookie = escape(".$subid.") + ‚=‘ escape(‚none‘)";
}
}

#erzeugen des Tabellenkopfes
if($_COOKIE[$subid]==„block“)
{
echo „“;
}
else
{
echo „“;
}

brauche dringend Hilfe, bin nun total verwirrt.

hab mittels Firefox festgestellt (beim anschauen der Cookies), das die Werte richtig gesetzt werden, aber beim Anzeigen der Cookies im Script selber

echo $_COOKIE[$subid];

das der alte Wert drinsteht, es entsteht also eine Verzögerung und da liegt mein Problem. wenn man mindestens einmal aktualisiert, beim zweiten mal setzt er alles auf none.

Hilfe!!!

ich mach jetzt kein code review, das ist mir an der Stelle zu doof…

Cookies werden am Seitenstart übertragen.
chronologisch geht das etwa so:

Client -> Server, gib mit die Seite xyz
Server -> okay, und wer bist Du?
Client -> sorry, hab noch nix
Server -> dann bekommst Du von mir jetzt den Namen Client1 und hier ist auch gleich die Seite xyz. Wenn Du wiederkommst, dann sag mir, dass Du Client1 bist.
Client -> okay, mach ich - dafür hab ich ja meine Keksschachtel

(wenig später)
Client -> Hey Server, ich bins, Client1. Gib mir doch bitte mal Seite abc
Server -> okay mach ich, aber ab dann bekommst Du von mir den Namen gierigerClient - In zukunft nennst Du Dich dann so - hier kommt die Seite…
Client -> danke, Server…

wie Du das umgehen kannst ist simpel.
Da wo Du Dein Setcookie hast musst Du einfach $_COOKIE[‚key‘] = $value; setzen.
Das ist ein einmaliger vorgang und überschreibt für den aktuellen Seitenaufruf die Client-Variable.
Aber achtung: Wenn ein Client keine Cookies akzeptiert sieht ein login Prozess so aus:

Client -> ich logg mich ein
Server -> (prüft login) okay, merk Dir Dein Hash, damit ich Dich wiedererkenne, hier ist die Seite
Client -> der Hash ist mir zu doof, den merk ich mir nicht!
Server -> dann kann ich Dir nachher auch keine Seiten mit Authorisierungsbedarf anzeigen - Du bist jetzt wieder ausgeloggt

Es gibt zwar mittel und wege die Daten über die URI mitzuschleifen, aber das ist eher umständlich…

HTH
Munich

Danke für den Tipp, Munich

hab den Code auch geändert.

Dabei taucht aber nun ein anderes Problem auf:

er setzt mir den Value meines Cookies nach zweimaligem Aufruf auf meinen ersten Aufruf des Cookis zurück.

Kann das an meiner Schleife oder einer meiner Bedingungen liegen?

erster Aufruf des Cookies:
if($id=="" or $id==0)
{
setCookie($name, $wert);
}

Bedingung und zweiter Aufruf des Cookies
if($id=$subid)
{
if($_COOKIE[$subid]==„none“)
$_COOKIE[$subid]=„block“;
else
$_COOKIE[$subid]=„none“;
}

Klapp jetzt, hab die Abfragen geändert:

if(!isset($id))
{
setCookie($name, $wert);
}

da bei $_COOKIE[$name] meine ID umgewandelt wird - von 3.2 auf 3_2 muss man das beim restlichen Code bedenken; gerade bei Aufruf der Cookies über den Namen.

Gruß

Schlafmütze