• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage(n) zu Sessions

  • Ersteller Ersteller francesco
  • Erstellt am Erstellt am
F

francesco

Guest
[GELÖST] Frage(n) zu Sessions in MODx

Anmerkung: Ich bin PHP-Anfänger und taste mich gerade an Sessions heran.

Es geht um folgenden Code, der ganz oben vom Dokument platziert wurde:

PHP:
<?php

session_start();

if (!isset($_SESSION['counter'])) $_SESSION['counter'] = 1;
else $_SESSION['counter']++;

echo $_SESSION['counter'];

?>
Auf einem lokalen Testserver macht der Code, was er soll: Beim Aktualisieren der Seite erhöht sich der Counter um 1.

Auf einer im Internet befindlichen Seite bleibt beim Aktualisieren die Zahl 1 stehen. Die Zahl erhöht sich erst, wenn ich die betroffene Seite neu abspeichere und dann die Seite aktualisiere.

PHP-Version ist 5.2.6 und Browser-Cookies sind aktiviert.

:neutral:
 
Zuletzt bearbeitet von einem Moderator:
Und danach funktioniert sie, wie sie soll, oder treten dann auch noch Probleme auf?
Danach, also wenn der Counter auf 2 steht, funktioniert es wieder nicht. Erst wenn ich das Dokument erneut abspeichere und das Browser-Fenster aktualisiere erhöht sich der Counter auf 3, usw ... Der Counter erhöht sich also nur dann, wenn ich das Dokument abspeichere.
 
D.h. du öffnest es auf dem Server, machst eine Änderung, aktualisierst die Seite im Browser und dann geht es wieder einen höhen? Oder was meinst du mit abspeichern?
 
D.h. du öffnest es auf dem Server, machst eine Änderung, aktualisierst die Seite im Browser und dann geht es wieder einen höher?
Genau. Im CMS (MODx, um genau zu sein) öffne ich das Dokument, wo der Code steht, ich speichere das Dokument, ich aktualisiere den Browser und der Counter erhöht sich um eins. Aktualisiere ich erneut, tut sich nichts.
 
Das scheint mir ein Problem mit deinem CMS zu sein, denn ich habe deinen Code mal auf meinem Server getestet und da funktioniert es.

Diesen Hinweis hast du auch gelesen?
Hinweis: Bei Verwendung Cookie-basierter Sessions müssen Sie session_start() aufrufen, bevor irgend etwas an den Browser geschickt wird.
PHP: session_start - Manual

Vielleicht liegt es daran.
 
wie währs wenn du einfach mal ordentlichen code schreiben würdest? also mit klammern und so... is ja schrecklich sowas

PHP:
session _start();

if(!isset($_SESSION['count'])) {
    $_SESSION['count'] = 0;
}

$_SESSION['count']++;
 
Wie ich oben schon geschrieben habe: Der Code wurde ganz oben vom Dokument platziert. Vorher wird auch nichts ausgeführt. Daran liegt es also leider nicht.
Aber du gibst den Code doch über ein Formular ein, oder? Dann wird das doch höchstens im <body> ganz oben stehen und nicht über dem Doctype. So kenn ich zumindest die CMS.
 
wenn der code ganz oben in der ersten datei steht die du ausführst muss er einfah funktionieren.
um zu testen obs vllt doch woanders dran liegt kannst du am ende deines ersten scriptes welches wirklich das ende sein sollte var_dump($_SESSION); schreiben und dir die ausgabe angucken.

Ps: Code zu verstehen fängt dabei an ihn richtig zu schreiben egal was "auch" funktioniert.

ach und wenns dann doch an dem cms liegt bist du hier eh falsch...
 
Aber du gibst den Code doch über ein Formular ein, oder? Dann wird das doch höchstens im <body> ganz oben stehen und nicht über dem Doctype. So kenn ich zumindest die CMS.

Nein, der Code steht über dem Doctype.

um zu testen obs vllt doch woanders dran liegt kannst du am ende deines ersten scriptes welches wirklich das ende sein sollte var_dump($_SESSION); schreiben und dir die ausgabe angucken.

Danke für den Tipp, werde ich mal ausprobieren.

Ps: Code zu verstehen fängt dabei an ihn richtig zu schreiben egal was "auch" funktioniert.

Der Code ist ja nicht "nicht richtig", deswegen verstehe ich deinen Einwand nicht.

ach und wenns dann doch an dem cms liegt bist du hier eh falsch...

Stimmt.
 
Nein, der Code steht über dem Doctype.

Hast du das auch genau überprüft? Häufig setzt man vor dem öffnenden PHP-Tag "<?php" einen Absatz oder auch nur eine Leerzeile. Dies führt meist dazu, dass der Browser diesen als HTML-Inhalt interpretiert und ausgibt und somit der Funktionsaufrug "session_start()" nichtmehr durchgeführt werden kann.
 
Häufig setzt man vor dem öffnenden PHP-Tag "<?php" einen Absatz oder auch nur eine Leerzeile. Dies führt meist dazu, dass der Browser diesen als HTML-Inhalt interpretiert und ausgibt und somit der Funktionsaufrug "session_start()" nichtmehr durchgeführt werden kann.
Das ist (teilseise) falsch. Da PHP eine serverseitige Scriptsprache ist, ist es unerheblich, was der Browser wie interpretiert. Bei Sessions alleine maßgeblich ist, wann der header an der Browser gesendet wird. Richtig ist, wenn vor dem <?php etwas an der Browser gesendet wird, auch wenn es nur eine Leerzeile ist, vorher ein header an den Browser geschickt wird, und deshalb kein session_start() mehr funktioniert.

Gruß thuemmy
 
Das Problem ist gelöst.

... und es hatte (oh Wunder) nichts mit PHP zu tun, sondern wie das Snippet (= der PHP-Code) in MODx (= das CMS) aufgerufen wurde.

Normalerweise ruft man ein Snippet in MODx so auf:
Code:
[[snippet]]
Dieses Snippet wird gecacht ausgeführt, d. h. der Counter konnte sich (logischerweise) nicht aktualisieren.

Will man die Ausführung eines Snippets auch bei eingeschaltetem Caching erzwingen, wird der Aufruf so notiert:
Code:
[!snippet!]
:wink: Man lernt nie aus ...

Danke für die Kommentare und die Hilfe!

Thread kann geschlossen werden.
 
Zurück
Oben