freeman4gu: Sessions kommen und gehen wie sie wollen

Hallo zusammen,

ich habe da ein Problem, ich hoffe ich poste hier richtig. Also ich habe eine Website mit Sessions erstellt. Komischerweise macht diese seit einiger Zeit einige Probleme. Und zwar, je nach Lust und Laune bricht die Session ab, nach einen bis mehreren Reloads bin ich wieder online.

Ich habe mal einfach die Session Variablen ausgeben lassen und tatsächlich, mal sind sie da, mal nicht.

Ich benutze eine dafür angelegte Session-Klasse. Ich werde mal etwas code posten wie das ganze funktioniert. Ich kann da keinen Fehler finden. Vielleicht seht Ihr ja was.

Code:
[CODE]
<?php
session_start();

require_once("session.php");

$session = new session();

$check = $session->getSession();

if($check == "false")
{
   $session->setSession("beispiel","beispiel");
}
else
...
?>

//Session Klasse

class session
{
  var $db;

function session()
  {
    $this->db = new db_klasse;
  }

function getSession() //Überprüft die Session und gibt true oder false zurück
  {
    if($_SESSION['userid']!="" && $_SESSION['nick']!="" && $_SESSION['name']!="")
    {
      $ergebnis = $this->db->db_query(...);

$result=mysql_fetch_array($ergebnis);

$zurueck = "false";

if($result[0]==$_SESSION['zahl'] && $_SESSION['nick']==$result[1])
      {
        $zurueck = "true";
      }

return $zurueck;
    }
    else
    {
      return "false";
    }
  }

function setSession($user, $passwd)
  {
    $ergebnis = $this->db->db_query(...);
    $bool = "false";
    $result = mysql_fetch_array($ergebnis);
    if($result[1]==$user && $user!="")
    {
      $_SESSION['userid'] = $result[0];
      $_SESSION['nick'] = $result[1];
      $_SESSION['name'] = $result[2];
      $zufall=rand(0,1000000);
      $_SESSION['zahl']=$zufall;

$bool = "true";
    }
    return $bool;
  }

}
[/CODE]

Ich habe ein wenig Code entfernt, will ja nicht alles preisgeben. Aber das ist grundsätzlich der Aufbau.

Ich hoffe Ihr könnt mir helfen.
Achso bevor ichs vergesse, das passiert in Firefox, Opera und IE. Von daher muss es was an der Programmierung sein.

  1. echo $begrüßung;

    Also ich habe eine Website mit Sessions erstellt. Komischerweise macht diese seit einiger Zeit einige Probleme. Und zwar, je nach Lust und Laune bricht die Session ab, nach einen bis mehreren Reloads bin ich wieder online.

    Den Code hab ich mir nicht genauer angesehen. Wenn du nur session_start() und das $_SESSION-Array verwendest ist der Fehler eher außerhalb zu suchen. Wo lagert das Projekt? Ist es vielleicht auf einem  Server, den noch andere Nutzer mitverwenden? Wenn ja, schau dir die Konfigurationswerte für Sessions in der phpinfo() an. Besonders der session.safe_path sollte auf ein eigenes Verzeichnis zeigen. Wenn da ein gemeinsames Verzeichnis verwendet wird, kann es passieren, dass da der Garbage Collector von PHP-Scripten mit andes konfigurierten Verfallszeiten aufräumt.

    echo "$verabschiedung $name";

    1. Hallo,

      Besonders der session.safe_path sollte auf ein eigenes Verzeichnis zeigen. Wenn da ein gemeinsames Verzeichnis verwendet wird, kann es passieren, dass da der Garbage Collector von PHP-Scripten mit andes konfigurierten Verfallszeiten aufräumt.

      Aber dann wäre doch die Session nicht mehr da.

      Also ich muss mich nicht erneut anmelden, sie besteht noch. Nur sie wird in 50% oder weniger der Fälle einfach nicht erkannt bzw. ich bekomme keine Ausgabe der Session Variablen. Wenn ich aber ein paar mal F5 drücke oder die Seite über Links wechsle, dann ist Sie wieder da.

  2. Hello,

    Ich habe ein wenig Code entfernt, will ja nicht alles preisgeben. Aber das ist grundsätzlich der Aufbau.

    Hast Du auch die Fehlerbehandlung entfernt?
    Datenbankquery ohne Kontrolle des Status ist schonmal eine mögliche Fehlerquelle für Dein Problem.

    Ein harzliches Glückauf

    Tom vom Berg

    http://bergpost.annerschbarrich.de
    .

    --
    Nur selber lernen macht schlau
    1. Hey,

      Ich habe ein wenig Code entfernt, will ja nicht alles preisgeben. Aber das ist grundsätzlich der Aufbau.

      Hast Du auch die Fehlerbehandlung entfernt?
      Datenbankquery ohne Kontrolle des Status ist schonmal eine mögliche Fehlerquelle für Dein Problem.

      Also die Querys funktionieren und falls die Abfrage falsch ist wird auch false zurückgegeben. Das ist nicht das Problem.

      Ich meine aber auch schon direkt auf der Startseite, lassen wir mal die Session Klasse weg.

      Dann

      <?php
      session_start();

      echo $_SESSION['beispiel'];

      ?>

      Dann ist der Wert ab und zu da und ab und zu halt auch nicht.
      Nur bei Relaod der Seite. Die verschwinden einfach manchmal bei
      einem Aufruf, sind aber beim nächsten wieder da.

      Bin bei Strato, vielleicht haben die auch Mist gemacht.
      Ich hab noch anderen Webspace, werde da mal den ganzen Kram
      testen, dann aber ohne DB - Abfrage. Vielleicht bringt das ja
      antworten.

      1. Hello,

        <?php
        session_start();

        echo $_SESSION['beispiel'];

        $_headers = getallheaders();

        echo "<pre>\r\n";
          echo "<h2>Cookies</h2>\r\n";
          echo htmlspecialchars(print_r($_COOKIE,1));
          echo "<h2>Headers</h2>\r\n";
          echo htmlspecialchars(print_r($_headers,1));
          echo "</pre>\r\n";

        ?>

        und mal schauen, ob man da festmachen kann, wann es funktioniert und wann nicht.

        Wenn übrigens ein Script, dass die Session nutzt, noch läuft, wenn Du das nächste aufrufst, dann kommt das zweite normalerweise nicht an die Sessiondaten heran, da das erste die Sessiondatei noch sperrt. Das zweite müsste dann allerdings warten, und nicht das Holen der Daten einfach überspringen.

        Gib doch bitte noch ein paar Informationen zu Deiner Umgebung:

        • OS:
        • Servertyp und Version:
        • PHP als Modul, CGI oder FastCGI:
        • PHP-Version
        • ...

        was man eben so wissen sollte.

        Ein harzliches Glückauf

        Tom vom Berg

        http://bergpost.annerschbarrich.de
        .

        --
        Nur selber lernen macht schlau
        1. Hello,

          <?php
          session_start();

          echo $_SESSION['beispiel'];

          $_headers = getallheaders();

          echo "<pre>\r\n";
            echo "<h2>Cookies</h2>\r\n";
            echo htmlspecialchars(print_r($_COOKIE,1));
            echo "<h2>Headers</h2>\r\n";
            echo htmlspecialchars(print_r($_headers,1));
            echo "</pre>\r\n";

          ?>

          und mal schauen, ob man da festmachen kann, wann es funktioniert und wann nicht.

          Wenn übrigens ein Script, dass die Session nutzt, noch läuft, wenn Du das nächste aufrufst, dann kommt das zweite normalerweise nicht an die Sessiondaten heran, da das erste die Sessiondatei noch sperrt. Das zweite müsste dann allerdings warten, und nicht das Holen der Daten einfach überspringen.

          Gib doch bitte noch ein paar Informationen zu Deiner Umgebung:

          • OS:
          • Servertyp und Version:
          • PHP als Modul, CGI oder FastCGI:
          • PHP-Version
          • ...

          was man eben so wissen sollte.

          Ok, also, das mit den Headern werd ich heute Nachmittag mal ausprobieren. Hab hier im Moment gerade keine Möglichkeit auf den Webspace zuzugreifen und änderungen vorzunehmen.

          Uii, mit den Umgebungsinformationen wirds schwer, da Strato nicht so viele Angaben bezüglich dieser macht. Also OS und Servertyp kann ich nciht sagen, außer es gibt ne php Funktion mit der ich das auslese.

          Ob PHP als Modul, CGI oder FastCGI läuft sollte ich eigentlich über phpinfo rausbekommen. Kann ich logischerweise aber auch erst heute Nachmittag machen. Ich vermute mal aber als CGI.

          Werde aber auch bald den Anbieter wechseln. Da ich mit Zugriffszeiten und Verfügbarkeit bei Stratos kleinen Paketen nicht wirklich zufrieden bin.

          So ich habe das ganze jetzt mal ein wenig umfunktioniert, halt alles bloß ohne Datenbankabfragen auf freehostia.de und siehe da keine Probleme.

          Was soll ich davon nur im Moment halten?!

          Ich habe aber auch noch eine andere Seite bei Strato, bei der eine ähnliche Version der Session Klasse einfach funktioniert.

          Ich hab einfach keine Ahnung, da muss sich was eingeschlichen haben.

          1. OK, also ich hab das Problem scheinbar gelöst.

            Es lag an den Einstellungen am Webspace. Bei Strato kann
            man angeben bei welcher Endung einer php Datei welche
            php Version genommen wird.

            Bei mir war noch 4.8 oder so ähnlich eingestellt, aber
            objektorientiert wurde php ja eigentlich erst mit php5.

            Hab dies jetzt geändert und zack alles läuft... jedenfalls
            bisher.

            Aber ich danke euch zwei, die mich tatkräftig unterstützt
            haben.

            1. Hello,

              Hab dies jetzt geändert und zack alles läuft... jedenfalls
              bisher.

              Daran sieht man mal wieder, dass die wirkliche Ursache oft erst erkannt werden kann, wenn man alle falschen Stellen ausgiebig untersucht hat :-)

              Hilfe, gerne wieder. Wenn Rückmeldungen kommen, macht das auch Spaß!

              Ein harzliches Glückauf

              Tom vom Berg

              http://bergpost.annerschbarrich.de
              .

              --
              Nur selber lernen macht schlau
  3. OK, also ich hab das Problem scheinbar gelöst.

    Es lag an den Einstellungen am Webspace. Bei Strato kann
    man angeben bei welcher Endung einer php Datei welche
    php Version genommen wird.

    Bei mir war noch 4.8 oder so ähnlich eingestellt, aber
    objektorientiert wurde php ja eigentlich erst mit php5.

    Hab dies jetzt geändert und zack alles läuft... jedenfalls
    bisher.

    Aber ich danke euch zwei, die mich tatkräftig unterstützt
    haben.