Ankündigung

Einklappen
Keine Ankündigung bisher.

Cookie setzen funktioniert in Unterverzeichnis der Domain nicht

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cookie setzen funktioniert in Unterverzeichnis der Domain nicht

    Ich bin gerade bei der umfangreichen Umstellung einer bereits vor Monaten online gestellten Website. Da viele Inhalte nun dynamisch erzeugt und vom Kunden gepflegt werden können (dazu gibt es ein "klitzekleines" CMS), ist eine Sitzungs-/Berechtigungs-Verwaltung notwendig.
    Diese realisiere ich gerade und möchte sie nun testen. Diese Tests können natürlich nicht im Wurzelverzeichnis der Site gemacht werden, sondern in einem Unterverzeichnis "meineDomaene.de/test_xyz".
    Leider funktionieren Cookies dort nicht.
    In der aktiven Version, in deren index.php ich bereits "session_start()" eingefügt habe, funktioniert das Setzen der Cookies.
    Kopiere ich die Test-Version von index.php in das Wurzelverzeichnis, funktioniert dies auch.
    In diese habe ich vor der Zeile "session_start()" die Zeile
    PHP-Code:
    session_set_cookie_params (180"/""meineDomain.de"falsefalse); 
    eingefügt, die m.E. bewirken sollte:
    • "180", daß Cookies nach 3 Minuten gelöscht werden
    • "/", daß alle Verzeichnisse eingeschlossen werden (!!!)
    • usw.
    Sowohl Server-seitig ("session.use_only_cookies=1" ist gesetzt) als auch Browser-seitig (Cookies werden zugelassen) sind alle Voraussetzungen erfüllt.
    Auf explizites setcookie habe ich verzichtet, da auch so alles, was ich brauche funktioniert.

    Oder verstehe ich da irgendwas grundlegend falsch?

    Gruß

    A.


  • #2
    Du haust hier Sachen in einen Topf die so nicht zusammen gehören. Deine Cookie einstellungen mit session_set_cookie_params haben nix mit Sessions zu tun.

    Die Session ID wird lediglich als Cookie propagiert. ABer eben als Session-Cookie der vollkommen losgelöst von Deinen anderen Cookieeinstellungen funktioniert.

    Schreib doch mal bitte genauer was wo, wie nicht geht. und vor allem zeige Code mit dem das reproduzierbar ist.

    Willst Du evtl. Sessions nutzen und das funktioniert nicht?

    Kommentar


    • #3

      Zitat von Messier 1001 Beitrag anzeigen
      ... Schreib doch mal bitte genauer was wo, wie nicht geht. und vor allem zeige Code mit dem das reproduzierbar ist.
      Das habe ich oben schon alles geschrieben: Der hier relevante Code besteht bisher lediglich in diesen beiden Zeilen, die in dieser Reihenfolge hintereinander stehen:
      PHP-Code:
        session_set_cookie_params (300"/""meineDomain.de"falsefalse);
        
      session_start(); 
      Der Kontext dieser beiden Zeilen sieht so aus:
      PHP-Code:
      <?php
      # -- INCLUDES ---------------------------------------------
        
      include("k_fu9.php");
        include(
      "w4_functions_vk.php");
        include(
      "w5_functions_vk.php");

      # -- SESSION STARTEN UND SESSIONVARIABLEN BEHANDELN ----------------------------- 
        
      session_set_cookie_params (300"/""meineDomain.de"falsefalse);
        
      session_start();
        
      $session_id session_id();
        
      $ip_sess $_SERVER["REMOTE_ADDR"];
        
      $LngHdMod 99;           
        
      $mitgl_id fnc_speichere_Sitzung($session_id$ip_sess$LngHdMod);  
      ?>

      <!DOCTYPE HTML>
      <html>
      ...
      ...
      Was geht, was nicht?

      Mit der im Moment aktiven index.php, die die 8. Zeile ("session_set_cookie...") nicht besitzt, in der also das einzige, was in Bezug auf Cookies/Sessions wirksam ist, in der einen Zeile
      PHP-Code:
      session_start(); 
      besteht, funktioniert folgendes:
      • Das Cookie wird gesetzt, habe ich in den Einstellungen von Google Chrome überprüft, es ist vorhanden.
      • Wenn ich bspw. in index.php die Zeile
        PHP-Code:
        $_SESSION["rolle"]=3
        einfüge, kann ich nach dem Wechsel von index.php zu einer anderen Unterseite die Variable $_SESSION["rolle"] mit
        PHP-Code:
        if (isset($_SESSION["rolle"])) {
                
        $LngRolle $_SESSION["rolle"]; 
              } else {
                
        $LngRolle 0;  
              } 
        wieder aufnehmen und verwenden.
      • Wenn ich all das in der Testversion, gespeichert im Test-Unterverzeichnis, mache, funktioniert weder die Übermittlung der Variablen noch das Setzen des Cookie.
      • Wenn ich die Testversion vorübergehend im Wurzelverzeichnis speichere, funktioniert sowohl das Setzen des Cookie als auch die Übermittlung der Variablen.
      Also ziehe ich daraus die Schlußfolgerung, daß die Datenübertragung, die sich hier auf die Übertragung der Variablen $_SESSION["rolle"] (ja ich weiß, daß es keine Variable i.e.S. ist, sondern ein Offset der Super-Globalen!!) beschränkt - später werden es mehr Daten sein -, über das Cookie gelaufen ist.

      Und so ist es auch wie gewünscht. Hintergrund ist nämlich, daß ich folgendes bewirken möchte:
      Der User loggt sich irgendwann ein. Vorher kann er stundenlang auf der Site gewesen sein. Ob er eingeloggt ist oder nicht: Beim Betreten der Site wird immer die Sitzung geöffnet und von den Folgeseiten wieder aufgenommen. Ab dem Zeitpunkt des Login werden die von den jeweiligen Folgeseiten benötigten Daten immer beim Klicken der Buttons "Weiter", "Zurück", "Zurück zur Grundauswahl" usw. in der "Button-Variablen" via POST an die Folgeseite gesendet. Dies geschieht über ein Array, das hintereinander diese Integer-Variablen enthält. Dieses Array sieht, als String ausgegeben, z.B. so aus: "1;3;1;59;100;4;12;32;...", worin bspw. das Offset 1 obige "Rolle" (hier 3 = Redakteur, zum Editieren von Artikeln berechtigt), Offset 2 die User-ID, Offset 7 die augenblicklich ausgeführt Bearbeitungsart usw. ist.
      Wichtig ist nun: Damit nicht auf einer der Folgeseiten Aktionen ausgeführt werden können, zu denen der, der gerade am betr. Endgerät sitzt, nicht berechtigt ist, soll sich die gewählte Folgeseite jeweils durch einen Vergleich mit den via Cookie, also auf diesem Endgerät gespeicherten Daten
      • User-ID
      • Rolle
      • ...
      legitimieren.
      Vielleicht macht man das üblicherweise anders, keine Ahnung, vielleicht geht es einfacher, weiß ich nicht. Im Moment ist es jedenfalls so geplant.

      Für Verbesserungsvorschläge bin ich dankbar.

      Kommentar


      • #4
        Messier 1001 Falls es länger dauert, meinen Beitrag #3 zu beantworten, könntest du mir vorab die Frage beantworten:

        Ist meine Schlußfolgerung korrekt, daß die Daten, die ich in $_SESSION speichere, via Cookie an die Folgeseiten gelangen?

        Kommentar


        • #5
          Du sollst was reproduzierbares zeigen! Das was Du zeigst ist weit davon entfernt. (zu viele offene Fragen)

          Was mir bei überfliegen Deines Codes auffällt:
          • session_start() gehört IMMER und ohne Ausnahme in die erste Codezeile!
          • nochmal: Diene Cookieeinstellungen haben absolut gar nichts mit der Session zu tun
          • Session funktinieren nicht Verzeichnisabhängig. Sobald session_start() im aktuellen Script aufgerufen wurde wird die Session gestartet
          • Wichtig: Stelle sicher das error_reporting (in der php.ini) ausreichend konfiguriert ist (E_ALL reicht)
          • Wichtig: Stelle sicher das display_errors (in der php.ini) aktiviert ist.
          • Betreibe Debugging
          Vorschlag damit Du Dein Problem eingrenzen kannst.

          1. erstelle eine neue PHP Datei im Wurzelverzeichnis Deines Webs

          PHP-Code:
          <?php
          session_start
          ();
          $_SESSION'foo' ] = 'Messier 1001';
          ?>
          <a href="/test/test.php">Weiter ins unterverzeichnis</a>
          erstelle im unterverzeichnis test die datei test.php

          PHP-Code:
          <?php
          session_start
          ();
          if ( isset( 
          $_SESSION'foo' ] ) && 'Messier 1001' === $_SESSION'foo' ] )
          {
             echo 
          '<h1 style="color:green">Alles OK, Sessions funktionieren</h1>';
          }
          else
          {
             echo 
          '<h1 style="color:red">Sessions funktionieren nicht</h1>';
             
          phpinfo();
          }
          Kein andere Code in den Dateien!
          • Rufe die php im root verzeichnis auf
          • klicke auf den Link
          • Dann sollte immer da stehen das alles funktioniert
          Wird dann ausgegeben das sessions nicht funktionieren (PHP Info wird angezeigt) solltest Du mal den Session Abschitt daraus posten

          Kommentar


          • #6
            Zitat von Messier 1001 Beitrag anzeigen
            Du sollst was reproduzierbares zeigen!
            Bitte nicht in diesem Ton!
            ...

            Was mir bei überfliegen Deines Codes auffällt:
            Auf diese Auflistung gehe ich später ein, zunächst mal nur zu deinem Vorschlag:
            Vorschlag damit Du Dein Problem eingrenzen kannst.
            1. erstelle eine neue PHP Datei im Wurzelverzeichnis Deines Webs
            ...
            ...
            Dann sollte immer da stehen das alles funktioniert
            Habe ich alles gemacht: Es steht dort dick und fett und GRÜN: Alles OK, Sessions funktionieren

            Soweit.

            Im wesentlichen hast du damit das nachgestellt, was ich geschildert hatte - im Kern die Übertragung des Inhalts von $_SESSION["foo"] (das Problem war also anhand meiner Schilderung offenbar doch reproduzierbar!).

            Allerdings weicht dein Szenario in einem wichtigen Punkt ab: Es ging nicht um die Übertragung von einer Seite - hier "index_m.php" - in eine auf einem Unterverzeichnis, sondern um die Übertragung innerhalb eines Verzeichnisses, denn beim Testen (vgl. meine Schilderung) liegt ja die gesamte Site auf dem Unterverzeichnis.

            Ich habe deshalb Dein Szenario so abgewandelt, daß es meinem entspricht. Ergebnis: Es hat funktioniert. Sowohl innerhalb der Wurzelebene wie auch im test-Verzeichnis.

            Jetzt geht es also darum, herauszufinden, warum dieser eine Schritt bei deinem Beispiel funktioniert und bei meinem nicht.

            Kommentar


            • #7
              Hier der Code der beiden abgewandelten Dateien:

              index_mm_alt.php

              PHP-Code:
              <?php
              session_start
              ();
              $_SESSION'foo' ] = 'Messier 1001';
              ?>
              <a href="test2.php">Weiter zur Folgeseite</a>
              test2.php

              PHP-Code:
              <?php
              session_start
              ();
              if ( isset( 
              $_SESSION'foo' ] ) && 'Messier 1001' === $_SESSION'foo' ] )
              {
                 echo 
              '<h1 style="color:green">Alles OK, Sessions funktionieren</h1>';
              }
              else
              {
                 echo 
              '<h1 style="color:red">Sessions funktionieren nicht</h1>';
                 
              phpinfo();
              }
              ?>

              Kommentar


              • #8
                Zitat von Alf2016 Beitrag anzeigen
                Jetzt geht es also darum, herauszufinden, warum dieser eine Schritt bei deinem Beispiel funktioniert und bei meinem nicht.
                Na dann viel Spaß damit. Ich bin raus

                Kommentar


                • #9
                  Zitat von Messier 1001 Beitrag anzeigen

                  Na dann viel Spaß damit. Ich bin raus
                  Warum du raus bist, verstehe ich jetzt nicht. Vielleicht kannst du mir trotzdem vorher nochmal diese Fragen beantworten:
                  1. Kann das nicht-Funktionieren meiner Lösung was damit zu tun haben, daß ich dieses
                    PHP-Code:
                    session_set_cookie_params (300"/""rsv-rueckenwind.de"falsefalse); 
                    reingenommen habe?
                  2. Du sprichst oben vom Debuggen. Bisher habe ich keine Möglichkeit dazu gefunden. Software, die das macht ist jedenfalls nach meinen Recherchen kostenfrei nicht zu haben. Vielleicht hast du da einen Tipp. Ich bin es von SAP und von Entwicklungen mit VBA gewohnt, sehr umfangreich zu debuggen. Hier fehlt es mir, ich hätte damit allein in den letzten 3 Monaten schätzungsweise 10 - 20 Mannstunden sparen können.
                  3. Nochmal: Wird
                    PHP-Code:
                    $_SESSION["foo"
                    im Cookie oder woanders gespeichert?

                  Kommentar


                  • #10
                    Zwecks Debugging, hier mal der Leitfaden des Forums, der wahrscheinlich wenig "neues" für dich bereit hält. Überfliegen schadet denke ich nicht.
                    https://php-de.github.io/jumpto/leitfaden/#tipps

                    Ansonsten musst du für Debugging eine entsprechende Erweiterung installieren, üblicherweise ist das xdebug. Zusätzlich brauchst du dann noch eine IDE die den Debugger "bedienen" kann. Ich selbst verwende PhpStorm (das ist nicht kostenfrei), allerdings handelt es sich bei "netbeans" um eine ähnliche IDE mit der ein oder anderen Schwäche im direkten Vergleich. Debuggen sollte damit jedoch problemlos funktionieren.
                    Zum Einrichten von der IDE + Debugger gibs einige Tutorials im Internet, da findet sich sicher was nach deinem Geschmack.

                    Kommentar


                    • #11
                      Zitat von ChromOxid Beitrag anzeigen
                      Zwecks Debugging, ... sicher was nach deinem Geschmack.
                      Vielen Dank ChromOxid!

                      Ich werde mich dann heute abend mal daran machen, jetzt muß ich erstmal für ein paar Stunden weg.

                      Da Messier 1001 sich aus unverständlichen Gründen verabschiedet hat, könntest du mir bitte meine Frage 3. von #9 beantworten? Zusatzinfo: Ich habe gerade nochmal die Lösung von Messier, die ja funktionierte, getest und vor dem Wechsel von der einen zu anderen Seite das Cookie in den Google-Chrome-Einstellungen gelöscht. Darauf hin hat es nicht funktioniert. Ist das nun die zuverlässige Antwort auf meine Frage, daß die Übertragung über das Cookie läuft?

                      Das ist die Frage bzw. Antwort, von der hier einiges bei mir abhängt, wie du ja aus meinen obigen Ausführungen entnehmen kannst.

                      Im Voraus herzlichen Dank!

                      Gruß

                      Kommentar


                      • #12
                        Zitat von Alf2016 Beitrag anzeigen
                        Da Messier 1001 sich aus unverständlichen Gründen verabschiedet hat...
                        Nach Deiner Antwort in #6 wäre ich auch raus. Messier 1001 hat alle Fragen hinreichend gut beantwortet und kostenlos für Dich Zeit investiert ... -> um von Dir angepampt zu werden...

                        Würdest Du Deinen Teil erledigen und Dich mal mit dem Unterschied zwischen Cookie und Session intensiv befassen, wäre der gesamte Thread längst erledigt.

                        Kommentar


                        • #13
                          Dazu eine Auswahl an Leseempfehlungen: https://www.google.de/search?q=php+s...ie+unterschied

                          [MOD: Thread geschlossen]
                          Competence-Center -> Enjoy the Informatrix
                          PHProcks!Einsteiger freundliche Tutorials

                          Kommentar

                          Lädt...
                          X