Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem bei session Lifetime

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei session Lifetime

    Hallo zusammen,

    habe ein Problem, was ich noch nicht unter Kontrolle bekomme, daher frage ich euch, ob ihr mir da unterstützung geben könnt!

    Es geht um ein PHP MySQL Projekt, der benutzer meldet sich an und wärend der gesamten arbeit wird die Session mitgeführt. Habe die Lifetime auf 9 Stunden gesetzt, wie man hier sieht...


    Code:
    session
    Session Support 	enabled
    Registered save handlers 	files user
    
    Directive	Local Value	Master Value
    session.auto_start	Off	Off
    session.bug_compat_42	On	On
    session.bug_compat_warn	On	On
    session.cache_expire	600	600
    session.cache_limiter	nocache	nocache
    session.cookie_domain	no value	no value
    session.cookie_lifetime	32400	32400
    session.cookie_path	/	/
    session.cookie_secure	Off	Off
    session.entropy_file	no value	no value
    session.entropy_length	0	0
    session.gc_divisor	100	100
    session.gc_maxlifetime	32400	32400
    session.gc_probability	1	1
    session.name	PHPSESSID	PHPSESSID
    session.referer_check	no value	no value
    session.save_handler	files	files
    session.save_path	/var/lib/php	/var/lib/php
    session.serialize_handler	php	php
    session.use_cookies	On	On
    session.use_only_cookies	Off	Off
    session.use_trans_sid	Off	Off
    Trotzdem passiert es, das der Benutzer sporadisch raus geworfen wird. Nämlich durch dieses Skript...

    Code:
    $query	=	"SELECT pwd from user WHERE user='".$_SESSION['s_user']."'";
    	    $sql_query		=	mysql_query($query);
    		      if (mysql_errno()) die ("MySQL-Error: ".mysql_error());
    	    $result			=	mysql_fetch_array($sql_query);
     	    extract($result);
     	    if ($pwd!=$_SESSION['s_pwd'] or $pwd=='' or $_SESSION['s_pwd']=='' )
     		    {echo"<body onload=document.location.href='fehler.php'></body>";}
    Ich will damit verhindern, das kein rekusiver aufruf der Dateien möglich ist, sobald keine Session da ist, oder das Kennwort nicht mit dem gespeicherten übereinstimmt, wird auf die Fehlerseite verwiesen.

    Das Problem wie es mir schein ist, das die Session plötzlich nicht mehr da ist und somit alles zutrifft, und zur Fehlerseite verwiesen wird.

    Mir fehlt dazu leider nichts ein, einfach eine neue Session machen geht ja nicht!

    Könnt ihr mir hierbei helfen ?

    Edit:
    Was noch zu erwähnen ist, der Rausschmiss erfolgt immer nach aufruf dieses Skriptes zur aktualisierung...
    Code:
    function ChangeCtrl()
       {
          document.getElementById("balkenfield").style.display='none';
          document.DisplayC.Display.value=ChangeC;
          if (ChangeVal==ChangeC)
          {
             parent.location.href="seeavis.php?fromrenew=ja";
          }
          else
          {
             ChangeC++;
             setTimeout('ChangeCtrl()',1000)
          }
       }
    BIG BIG THX

    Cyberbob
    ***********************************
    The only winning move is not to play!
    ***********************************

  • #2
    Hallo,

    ich fürchte dass bei

    Code:
    parent.location.href="seeavis.php?fromrenew=ja";
    keine Session-ID mitgegeben wird und dadurch die Session nicht wieder aufgenommen werden kann.

    Sowas solltest du aber tunlichst vermeiden:

    Code:
    extract($result);
    Das ist unsauber und fehleranfällig!
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Beide Codeschnipsel beeinflußen weder die Session, noch das Cookie und können somit zumindest als direkte Fehlerquellen ausgeschlossen werden. Höchstens deren Weiterleitungen könnten den Session-Verfall beeinflußen.

      Ob deine Einstellungen für die 9-Stunden-Session stimmen kann ich gerade nicht bestätigen oder widerlegen (cache_expire steht zB auf 10 Stunden), an den Einstellungen ändere ich nur sehr sehr selten etwas und wenn bin ich immer etwas verwirrt, welche Einstellung nun wirklich auch welchen Effekt hat. Nach oben hin kannst du die Session wohl auch nur wirklich sicher begrenzen, in dem du den Zeitstempel mitschleppst und vergleichst, denn auf den Garbage Collector kannst du dich nicht verlassen.

      Das Problem scheint ja aber das ausloggen zu sein. Welche Skriptblöcke beenden denn die Session? Log ihre Aufrufe mal in einer Datei mit. Außerdem bietet dir die Web-Developer-Toolbar von Firefox die Möglichkeit, alle aktuellen Cookies einzusehen.Schau dort nach jedem Aufruf einmal hinein, ob das Cookie noch da ist. So kannst du gut eingrenzen wann die Session verloren geht und zwischen diesen beiden Blöcken notfalls alles mitloggen was zur Lösung führen könnte.

      Bei Session- oder Cookie-Verlust ist es immer sehr schwer zu helfen, wenn -zumindest für mich gerade- kein offensichticher Fehler (bzw. relevanter Codeblock ) vorliegt.

      Kommentar


      • #4
        @dr.e.
        sollte man stattdessen "mysql_result" nutzen ?

        Also nach dem Aufruf wird die SessionID mitgeliefert, zumindest meistens. Sonst würde es ja nicht sporadisch sein und solche Probleme machen

        Gibt es anderen weiterleitungsmöglichkeiten, wo die ID 100%tig übertragen wird ?

        @Zergling
        Werd man sehen was ich noch rausfinden kann! Mehr als ich geschrieben habe, weis ich aber bis jetzt noch nicht!
        Bei mir war am Anfang Cache_expiere auf 3 Stunden, da habe ich es auf 32400 Sekunden hochgesetzt. Es funktionierte soweit auch! Seitdem die aktualisierung drin ist, kamen die Fehler! Aber wo genau verstehe ich leider nicht!
        ***********************************
        The only winning move is not to play!
        ***********************************

        Kommentar


        • #5
          Zitat von Cyberbob_at_tot
          Also nach dem Aufruf wird die SessionID mitgeliefert, zumindest meistens. Sonst würde es ja nicht sporadisch sein und solche Probleme machen
          "zumindest meistens" und "sporadisch" passt ja dann wie die Faust aufs Auge. Liefer die Session-ID bei JavaScripten einfach manuell mit
          Code:
          session_name() . '=' . session_id()
          Allerdings hast du ja Cookies aktiviert, somit sollte es daran nicht liegen. Aber nicht jeder Benutzer hat ja Cookies aktiviert.

          Kommentar


          • #6
            @dr.e.
            sollte man stattdessen "mysql_result" nutzen ?
            Nein, es geht um den Zugriff auf die Variablen, die mysql_fetch_array() zurückgibt. Das ist ein Array, und als solches sollte es auch verwendet werden. So z.B.:

            PHP-Code:
            <?php
            $query 
            "SELECT pwd from user WHERE user='".$_SESSION['s_user']."'";
            $query_result mysql_query($query);
            $query_data mysql_fetch_array($sql_query);
                    
            if(
            $query_data['pwd'] != $_SESSION['s_pwd'] or $query_data['pwd'] =='' or $_SESSION['s_pwd'] =='' ){
               echo
            "<body onload=document.location.href='fehler.php'></body>";

            ?>
            Viele Grüße,
            Dr.E.

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            1. Think about software design [B]before[/B] you start to write code!
            2. Discuss and review it together with [B]experts[/B]!
            3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
            4. Write [I][B]clean and reusable[/B][/I] software only!
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            Kommentar

            Lädt...
            X