wer löscht meine $_SESSION-Variable?

  • Hallo,

    ich arbeite mit einer eigenen Session und habe in meiner function.php:

    PHP
    function StartSession() {
        if(!session_id()) {
            session_start();
        $_SESSION['seite'] = 1;
        }
    }
    add_action('init', 'StartSession', 1);


    Ich übergebe eine Seitennummer per Link

    HTML
    <a href="eigene/neue_seite.php?seite=2">neue Seite</a>


    In der neue_seite.php kommt die Variable $neue_seite auch an und wird in $_SESSION['seite'] gespeichert. Dies habe ich per echo-Ausgabe getest.

    PHP
    $seite = $_GET["seite"];
    $_SESSION['seite'] = $seite;
    header("Location: http://meine_internetseite");

    Nur nach dem Aufruf der neuen Location ist die $_SESSION['seite'] nicht mehr existet.
    Außerhalb von Wordpress funktioniert dies. Innerhalb nicht.

    Thema: customizr - ich hatte auch schon ein anderes Thema probiert.
    Plugin: keines - alles gelöscht.

    Also: wer löscht meine $_SESSION-Variable?

    Gruß gonzine

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • ich arbeite mit einer eigenen Session und habe in meiner function.php:

    PHP
    function StartSession() {
        if(!session_id()) {
            session_start();
        $_SESSION['seite'] = 1;
        }
    }
    add_action('init', 'StartSession', 1);

    in eine Funktion würde ich session_start() nicht verstecken und if(!session_id()) { ist hier schrott.


    PHP
    $_SESSION['seite'] = 1;


    wenn dann

    PHP
    if (!isset($_SESSION['seite'])) {
      $_SESSION['seite'] = 1;
    }


    http://php.net/manual/de/function.session-start.php

    Ich übergebe eine Seitennummer per Link

    HTML
    <a rel="nofollow" href="eigene/neue_seite.php?seite=2">neue Seite</a>

    und da fehlt die SID

    HTML
    <a rel="nofollow" href="eigene/neue_seite.php?seite=2&amp;<?php echo SID; ?>">neue Seite</a>

    und der Bezug zu WordPress war jetzt?

    Mit offenen Augen träumen

  • Hallo, Danke für die Antworten.

    1.) den "Schrott" habe ich auf mehreren Seiten gefunden. Ich suche ja schon eine Weile.
    Die Version

    PHP
    if (!isset($_SESSION['seite'])) { 
      $_SESSION['seite'] = 1; 
    }


    liefert genau das gleiche.

    Der Zusatz zum Link

    HTML
    <a rel="nofollow" href="eigene/neue_seite.php?seite=2&amp;<?php echo SID; ?>">neue Seite</a>


    liefert leider auch keine Änderung.
    Die Variable wird ja richtig übergeben nach neue_seite.php.

    2.) Warum verschoben? Das ganze funktioniert ja außerhalb von WP, nur halt nicht innerhalb.

    Gruß gonzine


  • 1.) den "Schrott" habe ich auf mehreren Seiten gefunden. Ich suche ja schon eine Weile.

    Welche?

    Im PHP Handbuch wird die Session erklärt.
    http://php.net/manual/de/ref.session.php


    wenn du der Meinung bist, dass dieser Code sinnvoll ist lese ich dir gerne das PHP Handbuch vor:

    aus

    PHP
    if(!session_id()) {
            session_start();
        }


    wird

    PHP
    session_start()

    session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-Kennung basiert, die mit einer GET- oder POST-Anfrage oder mit einem Cookie übermittelt wurde.

    unter PHP 4 also in der Steinzeit hat man dies vermutlich mal so gemacht.

    halte dich an das Handbuch von PHP und nicht von WordPress Bastler.



    Der Zusatz zum Link liefert leider auch keine Änderung.


    PHP
    if (!empty($SID)) {
       $SID = session_name() . '=' . session_id();
    }
    
    
    echo '<a rel="nofollow" href="eigene/neue_seite.php?seite=2&amp;' . $SID . '">neue Seite</a>';

    Wichtig ist, dass hinter der seite=2&amp; die Session steht. Die Session besteht aus dem Namen PHPSESSION und der ID zum Beispiel 66402628b363e7e70b7db64ba2924ae8

    der Link sollte dann so aussehen

    http://exmaple.org/eigene/neue_se…b7db64ba2924ae8

    der Inhalt der Session wird auf dem Server speichert. Die Datei sollte erstellt und vorhanden sein wird mit session_save_path bestimmt.

    und im Browser wird die Session als Cookie angenommen.


    in dem Script: eigene/neue_seite.php auf der gleichen Domain - nimmt man dann die Session mit


    PHP
    session_start()

    an.

    Wenn es nicht funktionert

    PHP
    error_reporting(E_ALL);


    selbstverständlich sollte hier der session_save_path, der name usw. identisch sein.


    2.) Warum verschoben? Das ganze funktioniert ja außerhalb von WP, nur halt nicht innerhalb.


    wo sind wir innerhalb von WordPress? Was funktioniert?

    Wenn eigene/neue_seite.php eine eigene Session Verwaltung hat (eigenes Session Verzeichnis, eigene Session Domain, eigenen Namen der Session, einen Sicherheits-Tocken nicht jeder nimmt von jedem einen Session an. Warum steht hier http://www.php-kurs.com/session-hijacking.htm musst du dich mit der Session konfiguration beschäftigen ...

    Mit offenen Augen träumen

    Einmal editiert, zuletzt von r23 (14. März 2016 um 01:55)

  • Hallo,
    vielen Dank für die vielen, guten Belehrungen.

    Es tut mir leid, dass ich so unklar ausgedrückt habe.

    In einer bestehenden Webseite, die nicht unter WP läuft, geht folgender Ablauf:
    Eine Session wird erzeugt, die Session-Varriablen werden in php-Dateien beschrieben und in anderen php-Dateien wieder ausgelesen. Alles so wie es soll.

    Jetzt wird diese Webseite in WP neu gestaltet und einige Funktionen müssen erhalten bleiben. Für diese Funktionen werden Session-Variablen benötigt.
    Zu diesem Zweck hatte ich es in der WP-Umgebung an einem einfachen Beispiel (wie die Übergabe einer Seitennummer) getestet.
    Die Session wird in der function.php erzeugt. Die Variable wird auch übergeben. Doch sobald WP eine neue Seite aufruft, ist die Session zwar noch da, doch die Session-Variable ist nicht mehr existent.

    Ich wünsche eine gute Woche
    gonzine


  • Zu diesem Zweck hatte ich es in der WP-Umgebung an einem einfachen Beispiel (wie die Übergabe einer Seitennummer) getestet.

    lol

    erstelle dir ein WordPress Plugin, dass zu deiner Anwendung passt.

    Hier ein paar Beispiel
    https://wordpress.org/plugins/tags/sessions

    1. magento
    2. meine empfehlung für die eigen Entwicklung
    https://wordpress.org/plugins/wp-native-php-sessions/



    Die Session wird in der function.php erzeugt. Die Variable wird auch übergeben. Doch sobald WP eine neue Seite aufruft, ist die Session zwar noch da, doch die Session-Variable ist nicht mehr existent.

    dies ist ein typischer Fehler von wildem gebastelt wie deisem:

    PHP
    function StartSession() {
        if(!session_id()) {
            session_start();
        $_SESSION['seite'] = 1;
        }
    }

    ^- Schrott halt.

    Mit offenen Augen träumen

  • WordPress nutzt und "mag" keine PHP Sessions. Eine Lösung (von vielen): https://github.com/pantheon-systems/wp-native-php-sessions

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!