conym18: session fkt. nicht

hallo,

habe folgenden quelltext

$akt_version = "4.3.11";

@session_start();
if($_SESSION['version'] == $akt_version)
{
 $_SESSION['version'] = "".$akt_version."";
 echo("weiterleitung an eine seite");
}
else
{
 ?>
 <script language="JavaScript">
 <!--
  alert('Seit Ihrem letzten Besuch gibt es eine neue Version.');
 //-->
 </script>
 <?
 $_SESSION['version'] = "".$akt_version."";
}

wenn ich die aufrufe, bekomme ich das, wie es auch sein muß ALERT.
wenn ich die seite aber noch mal aufrufe, kommt die meldung noch mal, was ja eigentlich nicht sein sollte.

wo ist evtl. mein fehler?

danke

  1. Moin!

    wenn ich die aufrufe, bekomme ich das, wie es auch sein muß ALERT.
    wenn ich die seite aber noch mal aufrufe, kommt die meldung noch mal, was ja eigentlich nicht sein sollte.

    wo ist evtl. mein fehler?

    Ohne jetzt Deine Logik zu prüfen:

    @session_start();

    Nimm das "@" da weg. Es ist nicht sinnvoll die Warnung/Notiz zu unterdrücken, wenn Dein Skript fehlerhaft ist. Das kann nämlich die Ursache sein.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
  2. hallo,
    ein fehler liegt auf jeden fall in der initialisierung der session. sessions werden in den header geschrieben und daher darf noch nichts sonst in der php seite geschrieben worden sein. je nach server ist eine leere zeile schon der ende des headers und dann kannst du keine session mehr starten. session_start() also in die erste zeile schreiben. und auf jeden fall das @ vor session_start() rausnehmen und prüfen, ob das bei deienm server der fall ist.

    lg
    quasi_modem.

    hallo,

    habe folgenden quelltext

    $akt_version = "4.3.11";

    @session_start();

  3. echo $begrüßung;

    $akt_version = "4.3.11";

    @session_start();

    Wenn man Fehlermeldungen unterdrückt und auch noch den Rückgabewert von Funktionen ignoriert, sollte man sich nicht wundern, wenn angeblich kein Fehler auftrat und das Script trotzdem nicht funktioniert.
    Entferne zur Fehlersuche den Fehlerkontrolloperator @. In das fertige Script kannst du ihn wieder aufnehmen, wenn du den Besuchern die PHP-Meldung ersparen möchtest, die im Falle eines Fehlers ausgegeben wird. Allerdings solltest du dann den Rückgabewert von session_start() auswerten und angemessen darauf reagieren.

    Wie an anderer Stelle bereits gesagt wurde, darf vor dem Starten der Session keinerlei Ausgabe erfolgt sein. Dass session_start() unbedingt in die erste Programmzeile gehöre, ist dagegen nicht richtig.

    if($_SESSION['version'] == $akt_version)

    Beim ersten Starten der Session ist $_SESSION['version'] noch nicht vorhanden. Ein Lesezugriff auf etwas nicht vorhandenes ist ein Programmierfehler. PHP ist hier tolerant und gibt das nur mit einer Notiz zu bedenken, die angezeigt wird, wenn man das error_reporting auf E_ALL stellt. Diese Notizen sind wertvolle Hinweise beim Entwickeln und der Fehlersuche.

    $_SESSION['version'] = "".$akt_version."";

    In $akt_version ist ein String enthalten. Davor und danach Leerstrings zu hängen ist genauso sinnlos, wie zu einer Zahl  0 zu addieren. Möchte man eine Typumwandlung haben (was hier aber nicht erforderlich ist) sollte man das auch so notieren, um dies für andere Quelltextleser zu verdeutlichen.

    wenn ich die aufrufe, bekomme ich das, wie es auch sein muß ALERT.
    wenn ich die seite aber noch mal aufrufe, kommt die meldung noch mal, was ja eigentlich nicht sein sollte.
    wo ist evtl. mein fehler?

    Neben dem oben erwähnten Grund der zu einer von dir unterdrückten Fehlermeldung führen kann, kann es auch noch sein, dass aus anderen Gründen kein Cookie mit der Session-ID gesetzt werden konnte und die Ausweichvariante (Anhängen der Session-ID als Parameter an URLs) nicht funktioniert hat.

    echo "$verabschiedung $name";