Session_id wird neu generiert (IE)

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

  • Session_id wird neu generiert (IE)

    Moin Leute,
    Ich habe für meine Webapplikation eine umfangreiche Klasse zum Schutz der Session_id's geschrieben (Cookies, UA, etc.)

    Im Firefox läuft alles bestens, doch im IE wird nach jedem 2. klick eine neue Session generiert.
    Das aber auch nur auf der Seite wo die "Überprüfungs Klasse" greift.
    Ich habe schon versucht den Fehler zu finden, aber irgendwie will es mir nicht gelingen.
    Hat jmd. vllt eine Idee woran das liegen könnte?

    PHP-Code:
    public function secure_mainpage($sessionid$sessionid_get$user_agent
    {
                if(
    $this->checkSID($sessionid)) {
    [
    B]... ... ...[/B
                
                }
                else {
                    
    $this->kickAndRegenerateSid($sessionid);
                    return 
    false;
                }
            } 
    In "checkSID()" werden aber lediglich die sessionid und die sessionid die in der URL steht verglichen. Jedoch hängt es schon an dieser Stelle, weil ich hab mir "$sessionid" mal ausgeben lassen, und da war tatsächlich ne neue Generiert, die alte session stand aber noch in der Datenbank.
    Ist wie es würde irgendwo "session_regenerate_id()" ausgeführt werden (was aber nicht der Fall ist).

    Thx
    Zuletzt geändert von deathcakeman; 13.02.2009, 18:32.
    *blubb*

  • #2
    Kann es sein, dass der IE die Session ID im Cookie erhalten hat ? Dann steht natürlich nix in der UR und die Fkt würde immer ein false zurückgeben

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Ich setze mittels setcookie() einen ""sessioncooie"".-->Ich lese dann nur im späteren Verlauf der Funktion noch aus dem Cookie die SID aus und vergleiche nocheinmal.
      Aber: "$sessionid == session_id()"!
      Zuletzt geändert von deathcakeman; 25.05.2007, 16:48.
      *blubb*

      Kommentar


      • #4
        So.
        Nach langwieriger Fehlersuche hab ich nun den Fehler an sich schonmal gefunden, jedoch hab ich keine Ahnung wie ich ihn beheben kann.


        Fehler:
        Der IE 6 verhaut irgendwie den session_cookie, wodurch zwangsläufig eine neue session generiert wird.

        -->Ich hab vorhin mal "session.use_cookies" auf , also off, gesetzt und da ging alles wunderbar.

        Hatte jmd. von euch schonmal ein Problem dieser Art und hat auch gelöst bekommen?


        Ich hoffe ihr könnt mir hier weiterhelfen.

        Lg
        *blubb*

        Kommentar


        • #5
          also ich weiss ja nicht ob es genau das selbe problem ist wie bei dir, aber ich schildere dir mein problem mal....

          ich bin gerade dabei eine art kleines community portal zu programmieren und es funktioniert auch soweit alles.. mit dem FF teste ich das ganze online, nun hatte ich neues layout eingefügt und wollte es auch mit dem IE testen.

          das problem tritt direkt nach dem einloggen auf. der FF kann alles und es funktioniert, der IE generiert immer eine neue session... und somit steht eine ungleiche session in der datenbank... worauf mein script eben sagt, dass der user nicht mehr eingeloggt ist...

          und ich bin mir 100%ig sicher, dass es mit dem IE funktioniert hat... ich werde es gleich mal mit Opera am PC meines bruders testen.

          ich melde mich gleich wieder

          EDIT: also opera hat auch keine probleme mit dem einloggen und eingeloggt bleiben....
          Zuletzt geändert von Jemand; 29.05.2007, 20:53.

          Kommentar


          • #6
            *schieb*

            das problem besteht immer noch... kann mir vllt jemand helfen?

            noch mal die problembeschreibung:

            mit firefox: user kommt auf die seite, kann sich einloggen, kann weitere seiten benutzen

            die session wird mittels einer sessionhelpers.inc in die datenbank nach dem erfolgreichen einloggen geschrieben.

            mit internet explorer: user kommt auf die seite, kann sich einloggen, sobald er dann auf einen link klickt um auf eine andere seite zu kommen wird er wieder ausgelogged,.. bzw die erstellte session ist noch vorhanden, dem user wird aber gesagt, dass er sich erst einloggen soll.

            mit firefox und opera funktioniert das wunderbar, nur mit internet explorer nicht.

            sessionhelpers.inc:
            PHP-Code:
            <?
            function connect()
            {
                $con= mysql_connect('localhost','yyy','xxx') or die(mysql_error());
                mysql_query('SET NAMES UTF8');
                mysql_select_db('zzz',$con) or die(mysql_error());
            }

            function login($userid)
            {
                $sql="UPDATE users
                         SET UserSession = '".session_id()."'
                       WHERE UserId = ".$userid;
                mysql_query($sql);
            }

            function logged_in()
            {
                $sql = "SELECT UserId
                          FROM users
                         WHERE UserSession = '".session_id()."'
                         LIMIT 1";
                $result = mysql_query($sql);
                return (mysql_num_rows($result)==1);
            }

            function logout()
            {
                $sql = "UPDATE users
                           SET UserSession = NULL
                         WHERE UserSession = '".session_id()."'";
                mysql_query($sql);
                
                unset($_SESSION['Benutzername']);
            }

            function check_user($name, $pass)
            {
                $sql="SELECT UserId
                        FROM users
                       WHERE UserName = '".$name."' AND UserPass = MD5('".$pass."')
                       LIMIT 1";
                $result= mysql_query($sql) or die(mysql_error());
                if ( mysql_num_rows($result)==1)
                {
                    $user=mysql_fetch_assoc($result);
                    return $user['UserId'];
                }
                else
                  return false;
            }
            ?>
            und jetzt zb die index.php:
            PHP-Code:
            <?
              session_start();
              include 'sessionhelpers.inc.php';
              error_reporting(E_ALL);

              include("header.inc.php");
              include("top1.inc.php");

              if (isset($_POST['login']))
              {
                  $userid=check_user($_POST['username'], $_POST['userpass']);
                  if ($userid!=false)
                      login($userid);
                  else
                      include("err_anmeldedaten.inc.php");
              }

              if (isset($_POST['logout']))
              {
                logout();
              }

              if(!logged_in())
              {
                include("login.inc.php");
                include("menue.loggedout.inc.php");
                include("top2.inc.php");
                include("div.oben.inc.php");
                include("home.loggedout.inc.php"); /* inhalt wenn ausgelogged */
              }

              if(logged_in())
              {
                include("loggedin.inc.php");
                include("menue.loggedin.inc.php");
                include("top2.inc.php");
                include("div.oben.inc.php");
                include("home.loggedin.inc.php"); /* inhalt wenn eingelogged */
              }

              include("div.unten.inc.php");
              include("footer.inc.php");
            ?>
            Kann mir jemand helfen den code so zu schreiben, dass auch internet-explorer-user die cookies nicht akzeptieren nicht andauernd ausgelogged werden?
            Zuletzt geändert von Jemand; 13.08.2007, 15:45.

            Kommentar


            • #7
              Zeig mal nen Link zur Seite samt demodaten.

              Kommentar


              • #8
                www.russkaja-armia.de
                user: test
                pass: test


                falls die phpinfo wichtig ist:
                http://www.russkaja-armia.de/phpinfo.php
                Zuletzt geändert von Jemand; 13.08.2007, 17:25.

                Kommentar


                • #9
                  an die tester, bitte auch einen comment hier abgeben...

                  probiert mal ohne cookies zu akzeptieren drauf zu gehen und auch eingelogged zu bleiben...

                  und ich brauch den code bzw tipps womit die leute, die cookies nicht akzeptieren, dennoch online bleiben (auch mit der session in der url oder sonst wie)...

                  schon mal ein dickes danke schön für jeden tipp...

                  Kommentar


                  • #10
                    (auch mit der session in der url oder sonst wie)...
                    Andere Möglichkeiten als URL oder Cookie gibt's ned. Schau dir mal die Konstante SID im Manual an.
                    Alternativ können Sie die Konstante SID verwenden, die definiert ist, nachdem die Session gestartet wurde. Falls der Client kein geeignetes Session-Cookie gesendet hat, hat sie die Form session_name=session_id. Andernfalls wird sie zu einer leeren Zeichenkette erweitert. Aus diesem Grund können Sie sie bedingungslos in URLs einbetten.
                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      Ein Kollege sagte mir, dass es auch die Möglichkeit gibt Sessions nur dann an die URL anzuhängen, wenn Cookies nicht akzeptiert werden.

                      Habe mich auch ein wenig darüber erkundigt (google/forum/etc/pp) aber keine wirklich funktionierende Lösung gefunden.

                      Folgende Schlagwörter dazu habe ich ausprobiert:

                      - ini_set('session.use_only_cookies',0);
                      - ini_set('session.use_trans_sid',0);
                      - ini_set('url_rewriter.tags', '');
                      - ini_set('session.use_cookies',0);

                      Nur brachten diese leider nicht die gewünschte Wirkung.

                      Ist es überhaupt möglich die Sessions NUR dann anzuhängen wenn Cookies nicht akzeptiert werden oder wurde mir nur ein Hirngespinnst aufgetischt?

                      Kommentar


                      • #12
                        Mein Quote aus dem Manual gelesen ?
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          bin dabei melde mich gleich noch mal per edit hier dazu

                          edit: alles klar, habe mir jetzt mal die ganze kurzreferenz zu sessions und speziell zu der SID-Konstante durchgelesen.

                          Erste Frage:
                          Heisst es ich kann also jetzt hinter jeden link / hinter jede form auf meiner seite die SID dranhängen und es würde auch funktionieren wenn die cookies nicht akzeptiert werden?

                          Zweite Frage:
                          Die session_register-Funktion wurde hier im Forum oft als veraltet bezeichnet. Sollte man diese dennoch benutzen oder gibt es eine Alternative?

                          Danke dir vielmals für deine Hilfe
                          Zuletzt geändert von Jemand; 14.08.2007, 11:53.

                          Kommentar


                          • #14
                            Heisst es ich kann also jetzt hinter jeden link / hinter jede form auf meiner seite die SID dranhängen und es würde auch funktionieren wenn die cookies nicht akzeptiert werden?
                            Ja.
                            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                            Kommentar


                            • #15
                              Die session_register-Funktion wurde hier im Forum oft als veraltet bezeichnet. Sollte man diese dennoch benutzen oder gibt es eine Alternative?
                              Man sollte diese Funktion auf keinen Fall mehr benutzen, da sie von register_globals abhängt (Siehe http://de3.php.net/manual/de/functio...n-register.php).

                              Stattdessen einfach das $_SESSION-Array nehmen.
                              ich glaube

                              Kommentar

                              Lädt...
                              X