Session - mal will sie mal, will sie nicht

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

  • Session - mal will sie mal, will sie nicht

    Hallo Zusammen, ich habe schon einiges hier zu Sessions gelesen aber leider noch nichts was auf mein Problem passt.

    Ich schreibe an einer Seite die auch für Mobilegeräte geeignet sein soll und daher möchte ich auf Cookies verzischten. Das ganz steht auch soweit schon nur habe ich ein Problem. Wärend den ganzen Test auf meinem localen Server hatte ich
    session.use_cookies off
    gesetzt und dort läuft es Reibungslos über die SIDs die an die Url gehängt werden.
    Auf dem Webserver ist session.use_cookies On und dort werden die SIDs halt nicht übergeben. Das ganz wäre ja auch kein Problem aber die Cookies funktionieren scheinbar auch nicht.

    Bei mir funktioniert das einloggen mit hilfe von Cookies manchmal, aber ein paar bekannt hat es garnicht funktioniert.

    Zur Zeit bin ich ziemlich ratlos, ich könnte vielleicht veranlassen das auf dem Server auch session.use_cookies off gesetzt wird, aber das ist ja nicht die optimale Lösung.

    Hier mal die Variablen aus der php.ini (aus phpinfo kopiert)
    session.use_cookies On
    session.use_only_cookies Off
    session.use_trans_sid On

    Die Übergabe der Variablen im Loginscript:

    PHP-Code:
    if(isset($login_button))
       {
               
    session_start();
               
    $_SESSION['login']=$login;
               
    $_SESSION['pw']=md5($pw);
               
    header("Location:index.php?".SID);
       } 
    Mein Authorisierungskript:
    PHP-Code:
    function auth()
      {
          
    session_start();
          
          
    $loginID=0;
          
    $login_error=false//für Fehlermeldungen
          
          
    if(isset($_SESSION['pw']) || isset($_SESSION['login']))
        {
            
    $login_error=true;
            
    $query=("SELECT id, interface_language FROM user WHERE login='".$_SESSION['login']."' AND pw='".$_SESSION['pw']."'");
            
    $daten=mysql_query($query);
            if(
    $row mysql_fetch_array($daten))
                
    extract($row);    
        }

        if(
    $id!=0)
            return array(
    $id,$interface_language);
        else
        {
            
    header("Location:login.php?login_error=$login_error");
                    
            return 
    false;
        }  
      } 
    Bei einem Misslungen Login werden aus debug gründen zur Zeit die Session variablen angezeigt. Der Login name wir angezeigt die Passwort variable ist scheinbar leer.

    Sorry das ich hier Romane schreibe, aber ich weiss nicht wo ich bei dem Problem ansetzen soll.

    Schon mal danke im Vorraus.
    Wissen ist Macht
    Power is nothing without control

  • #2
    Re: Session - mal will sie mal, will sie nicht

    Original geschrieben von Mr.Programe
    Zur Zeit bin ich ziemlich ratlos, ich könnte vielleicht veranlassen das auf dem Server auch session.use_cookies off gesetzt wird, aber das ist ja nicht die optimale Lösung.
    Warum nicht?
    Damit hättest du eine definierte Umgebung, auf die du dich verlassen kannst.

    PHP-Code:
            header("Location:index.php?".SID); 
    1. zum x-tausendsten Mal: ein Location-Header erfordert zwingend einen absoluten URL inkl. Protokollangabe!
    2. dir ist klar, dass die Konstante SID leer ist, wenn die Übergabe per Cookie geklappt hat?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      2. dir ist klar, dass die Konstante SID leer ist, wenn die Übergabe per Cookie geklappt hat?
      hmm, ja... das ganze ist ja auch für die Cookie frei Version geschrieben

      zum x-tausendsten Mal: ein Location-Header erfordert zwingend einen absoluten URL inkl. Protokollangabe!
      habs sofort geändert, aber mit dem Session Problem hat es wohl nix zutun.
      Wissen ist Macht
      Power is nothing without control

      Kommentar


      • #4
        Moin,
        also als erstes empfehle ich Dir für die Zukunft, Dir auf Deinem Webserver eine Entwicklungsumgebung einzurichten wie z.b.
        entwicklung.deinSeitenname.de -> siehe Wahsage
        Weil Deine Bekannten haben bestimmt nicht auf Deinem System Testanmeldungen durchgeführt. richtig?
        Und dann Hast Du auch keine Systemumstellungsprobleme mehr!!!
        Die können echt nerven.

        Hast Du auf dem Webserver Zugriff auf das temp-Verzeichniss in dem die cookies gespeichert werden?
        Wenn nicht, oder wenn das n neues Teil ist werden die Sessions im Ram gespeichert.
        Dann kannst Du Dir mit
        print_r($_SESSION);
        mal anschauen was da drinnsteht und ob da überhaupt was drinnsteht.
        Bzw. wann die Einträge verschwinden.
        Ich rate Dir auf jeden Fall Dich für eine Version zu entscheiden!!!
        EntwederCookies oder eben über die SessionID.

        Noch was, wir hatten mal probleme mit selbstgesetzten cookies und dem IE. Sprich das Cookie Handling der Browser ist unterschiedlich!
        Wie das mit Session Cookies aussieht, weis ich nicht aber:

        Ich habe noch nie die SID mit übergeben und der Server wusste trotzdem immer auf welche Session er sich beziehen musste!!

        Auf jeden Fall sieht Dein Code merkwürdig aus.
        Ich habe gelernt als ERSTES session_start(); ohne leerzeichen oder sontwas davor.
        Nicht innerhalb der Funktion, weil dann steht da nämlich was vor session_start()

        Warum übergibst Du denn die Variablen nicht einfach mit POST?
        Gibts da einen Grund für?
        bzw. was passiert denn, wenn Du die Variablen einfach in die Session schreibst und auf der nächsten Seite ausliest?
        Sind die dann weg?

        Ich dachte immer die SID wird automatisch mit übergeben bzw. der Server macht das an der Verbindungskennung fest,
        wer Du bist und so.

        Wie gesagt: Ich mache das so:
        session_start();
        $_SESSION['bsp_var']=$beispielwert;
        und auf der nächsten Seite:
        session_start();
        $Beispiel=$_SESSION['bsp_var'];

        Und das geht ohne SID oder irgendwas anzugeben.
        Ich glaube, wenn Da die cookies auf on gesetzt sind, dann speichert er die Werte in die Session_cookies
        und wenn Du ihm dann die SID mit übergibst,
        dann schaut er in der Session nach und da steht nix, weil der Server sagte er soll das im cookie speichern.
        Folglich weis er irgendwann nicht mehr was er tun soll.
        Mach doch einfach mal Deinen Header ohne SID und schau was kommt.

        Ich mach jetzt erst mal Feierabend und schau später nochmal rein.

        Grüße
        Wendel
        Das Leben ist kein Ponyhof.

        Kommentar


        • #5
          wenn du das ding eh so geschrieben hast, dass es ohne cookies am besten läuft, solltest du wahsaga's vorschlag umsetzen.

          einfach ein ...
          PHP-Code:
          ini_set('session.use_cookies'0); 
          ... am anfang in deine datei(en) und fertig.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Re: Session - mal will sie mal, will sie nicht

            Original geschrieben von Mr.Programe

            Die Übergabe der Variablen im Loginscript:

            PHP-Code:
            if(isset($login_button))
               {
                       
            session_start();
                       
            $_SESSION['login']=$login;
                       
            $_SESSION['pw']=md5($pw);
                       
            header("Location:index.php?".SID);
               } 
            woher kommt $login_button? von einer Form? wie hast du dann die Form-Element ausgelesen? $_POST? $_GET? register_globals =ON oder OFF?

            Kommentar


            • #7
              Warum denn nicht Cookies oder Session ? Soll doch der User entscheiden was er will. Jedes session_start() probiert in deinem Falle ein Cookie zu setzen. Damit du aber sicher gehen kannst, dass das Cookie akzeptiert wurde, muss der User einen erneuten Request an die Seite schicken.
              Also den User am Besten mittels eines Headers nochmal auf die gleiche Seite schicken und prüfen ob $_COOKIE['PHPSESSID'] gesetzt ist. Wenn nein dann akzeptiert der User keine Cookies und du machst einen erneuten Re-Direct, diesmal mit der SID angehängt.
              Ausserdem würde ich beim ersten Start der Session (sprich wenn sich der User eingeloggt hat) eine Kontrollsessionvar speichern. z.B. $_SESSION['blabla'] = 'check'
              Zur Authentifizierung des Users prüfst du neben dem Cookie resp SID eben noch ob $_SESSION['blabla'] gesetzt ist. Wird sie nicht sein, wenn auch nur ein Zeichen in der SID ned stimmt.

              Gruss

              tobi

              p.s. UNBEDINGT index.php?strip_tags(SID) machen. Ansonsten bist du offen für Crossscript Angriffe
              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


              • #8
                gibts da eigentlich ne Möglichkeit das er mir die SID an jeden Link dranhängt oder muss ich meine 500 Links manuell bearbeiten?

                Kommentar


                • #9
                  ja, wenn der Provider mitmacht => http://www.php.net/session schau dir den Part: Passing the Session ID mal an und natürlich die Var. session.use_trans_id auch

                  Kommentar


                  • #10
                    ok, danke.
                    insofern dürfte es kein problem werden weil ich mein eigener provider bin ;-)
                    nen eigenen server...

                    Kommentar


                    • #11
                      @asp2php
                      Wenn die session.use.trans als aktiv gesetzt wird, wie sieht es dann mit der Möglichkeit aus ein strip_tags(SID) zu machen ? Oder wird das bei dieser Einstellung automatisch gemacht ?
                      Wäre ja ansonsten ein ziemliches Risiko

                      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


                      • #12
                        ja, das mit den strip_tags() (bzw. frage von jahlives) würde mich auch interessieren...

                        Kommentar

                        Lädt...
                        X