Sitzungsvariablen bleiben zwischen Seitenladevorgängen nicht bestehen

Lesezeit: 7 Minuten

Benutzeravatar von user520300
Benutzer520300

Kann mir jemand sagen, warum die Sitzungsvariablen nicht zwischen Seiten ausgetauscht werden? Sie haben bis vor 2 Tagen gearbeitet. Jetzt ist es nicht? Es gibt ein Drittsystem, das Benutzer basierend auf dem Drittsystem anmeldet. Ich leite Benutzer mit der Rückgabe-URL auf die Anmeldeseite weiter. Das Drittanbietersystem meldet einen Benutzer an und übergibt seine ID und ein an seinem Ende generiertes Token und gibt ihn mit der ID und dem Token in der URL an meine Website zurück.

Wenn Sitzungen nicht festgelegt sind, versuche ich, die ID und das Token aus der URL zu holen und die Sitzungen festzulegen. (funktioniert) Ich generiere dann mein eigenes Token, um es mit dem vom Drittanbietersystem übergebenen Token zu validieren (funktioniert), wenn ich auf eine andere Seite klicke, sind die von mir festgelegten Sitzungen nicht leer (????)

Hier ist mein Code:

    <?php
    session_start();

    // FUNCTION TO PASS THE URL THE USER IS ON SO THEY COME 
    // BACk TO THIS PAGE AFTER THE LOG IN. IF APPLICABLE
    function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    } else {
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
    }

    // DESTROY SESSION INFO IF TIMED OUT
    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    session_destroy();   // destroy session data in storage
    session_unset();     // unset $_SESSION variable for the runtime
    }

    // SET THE SESSIONS WITH INFO PASSED FROM
    // LOGIN PAGE SENT AS A GET
    if(isset($_SESSION['ID']) && isset($_SESSION['token'])) {}else{
    $_SESSION['ID'] = $_GET['ID'];
    $_SESSION['token'] = $_GET['token'];
    }

    // GENERATE MY TOKEN TO MATCH THE LOGIN SYSTEM TOKEN
    $userIP = $_SERVER['REMOTE_ADDR'];
    $secretkey = 'A Unique Key For The Logged In User Matching the Login System Passed From mydomain.com/login.php';
    $algorithm = 'md5';
    $mm = date('m');
    $dd = date('d');
    $mmdd = $mm.$dd;
    $mytoken = strtoupper(hash($algorithm, $secretkey.$_SESSION['ID'].$userIP.$mmdd));


    $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
    // THIS IS WHERE THINGS ARE GOING WRONG
// SESSION token IS NO LONG SET AFTER I Go To another page
// and my token isnt the same any more either because session ID
// is no longer set???
    if($_SESSION['token']==$mytoken){}else{
    header("location: https://mydomain.com/login.php?returnURL=".curPageURL());
    }
    ?>

ok das ist durcheinander. Es muss ein Problem mit dem PHP-Setup des Hosting-Providers sein, weil ich zwei Seiten erstellt habe. man rief info mit diesem Code an:

<?
session_start();

$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";

print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="https://stackoverflow.com/questions/6200612/info2.php">info 2</a>

und einer namens info2 mit diesem Code:

<?
session_start();

print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="https://stackoverflow.com/questions/6200612/info.php">info</a>

info erstellt und gedruckt die Sitzung ok. Wenn ich auf den Link klicke, um zu info2 zu gelangen, werden die Sitzungen nicht gedruckt. Ist das ein Hosting-Konfigurationsproblem?

  • Ich habe genau das gleiche Problem … außer dass sich meine Sachen auf localhost befinden und PHP mit IIS verwenden

    – Thomas An

    20. Oktober 2015 um 1:20 Uhr

Benutzeravatar von Rudi Visser
Rudi Visser

Stellen Sie, wie bereits erwähnt, sicher, dass Sie anrufen session_start() auf jeder Seite.

Sind die Skripte außerdem auf verschiedenen Subdomains?? Wenn dies der Fall ist, sollten Sie den INI-Wert festlegen session.cookie_domain zu .DOMAIN.EXT.

Um diese ganze Situation weiter zu debuggen, führen Sie eine einfache Cookie-Überwachung durch. Sehen ob PHPSESSID als Cookie auf beiden Seitenanforderungen vorhanden ist, ist dies Ihr Problem, wenn dies nicht der Fall ist. Sie können Cookies nicht domänenübergreifend speichern, es sei denn, Sie rekonstruieren sie.


Als Antwort auf Ihr Update versuchen Sie dies unter Ihrem Aufruf an session_start():

echo session_id();

Bestätigen Sie, dass es auf beiden Seiten gleich ist. Wenn nicht, überprüfen Sie den Wert von session.cookie_domain so was:

echo ini_get('session.cookie_domain');

Ist da irgendwas eingestellt? Standardmäßig sollte es leer sein, wenn es eingestellt ist, insbesondere nicht auf Ihre Domain, ist dies das Problem.

Sie können auch versuchen, den Cookie-Wert von zu debuggen PHPSESSID wie ich zuerst vorgeschlagen habe.

  • siehe meine Ergänzung zum Orig.-Beitrag

    – Benutzer520300

    1. Juni 2011 um 12:34 Uhr

  • Ich habe das noch nicht ausprobiert, werde es aber tun. Frage… wenn standardmäßig echo ini_get(‘session.cookie_domain’); ist nicht leer und es ist nicht meine Domain, was soll ich tun?

    – Benutzer520300

    1. Juni 2011 um 13:54 Uhr

  • 2 Optionen, 1: Wenden Sie sich an Ihren Hosting-Provider, weil es falsch ist, 2: Sie können verwenden ini_set('session.cookie_domain', '.your.domain'); oder ini_set('session.cookie_domain', ''); Vor session_start().

    – Rudi Visser

    1. Juni 2011 um 14:02 Uhr

  • As already mentioned, ensure you're calling session_start() on each page., immer die einfache Antwort, die mir entgeht. Prost Rudi, Kudos-Punkte für dich!!

    – Krass

    20. Dezember 2016 um 11:01 Uhr

  • Ich habe all dies überprüft und kann die Sitzung immer noch nicht zum Fortbestehen bringen. Ich sehe PHPSESSID gesetzt, aber meine $_SESSION Variablen tragen nicht zum Laden der nächsten Seite.

    – Nick Rolando

    15. Januar 2019 um 3:39 Uhr

Checkliste

1. Stellen Sie sicher, dass Sie session_start(); auf der nächsten Seite.

2. Verwenden Sie eine .htaccess-Datei?
Wenn ja, entfernen Sie die .htaccess-Datei und überprüfen Sie dasselbe.
Manchmal führen Umschreibungsregeln zu Sitzungsproblemen …

3. Wenn die Sitzung einwandfrei funktioniert und Sie nur Probleme mit dem Token haben, überprüfen Sie, ob das per URL gesendete Token url_encoded ist.

  • Ich habe den Zusatz überprüft. Dieses Problem kann auf die Serverkonfiguration zurückzuführen sein. erkundigen Sie sich bei Ihrem Hosting-Provider.

    – Jagadeesan

    6. Juni 2011 um 6:12 Uhr

  • In der Tat, mit der .htaccess-Datei war wodurch mein session_start() fehlschlägt und false zurückgibt. Wow, das ist wirklich subtil und heimtückisch! Thx es funktioniert jetzt.

    – IVSoftware

    24. Juni 2020 um 16:11 Uhr

Benutzeravatar von Hemant Jadhav
Hemant Jadhav

Es ist nicht das Problem mit dem Hosting-Server …

Überprüfen Sie Ihre URLs

Wenn sich ein Benutzer unter “example.com” anmeldet, wird die Sitzung für “example.com” und nicht für “WWW.example.com” gespeichert. Wenn also ein Link zu www.example.com geht, hat er diese Sitzung nicht.

Sie können htaccess verwenden, um die URL immer auf “WWW.example.com” zu setzen, verwenden Sie den folgenden Code dafür

RewriteEngine ein

RewriteCond %{HTTP_HOST} ^hemantjadhav.com$ [NC]

RewriteRule ^(.*)$ http://www.hemantjadhav.com/$1 [L,R=301]

(ersetzen Sie hemantjadhav durch Ihren Domainnamen)

  • Das war es, überprüfen Sie Ihre URLs! Ich rupfte mir die Haare aus und bemerkte nicht, dass ich von zwei verschiedenen Orten aus lagerte. Einmal mit www und einmal ohne.

    – Lernender33

    22. April 2021 um 16:43 Uhr

Benutzeravatar von greyob
grauob

Überprüfen Sie die Größe der Sitzungsdatei: (Code aus diesem Beitrag)

$sessionfile = ini_get('session.save_path') . "https://stackoverflow.com/" . 'sess_'.session_id();  
echo 'session file: ', $sessionfile, ' ';  
echo 'size: ', filesize($sessionfile), "\n";

Wenn Ihre Sitzungsdatei die Größe Null hat, stellen Sie sicher, dass auf Ihrem Server noch Speicherplatz verfügbar ist. Das war das Problem, das ich hatte.

Überprüfen Sie den Speicherplatz mit df -h auf einem Linux-Server.

Die Antwort darauf ist, dass es sich um einen Hosting-Konfigurationsfehler handelte. Das Hosting-Unternehmen hat etwas geändert und seitdem funktioniert es.

  • Es wäre schön zu wissen, was es war.

    – Bernhard

    14. Januar 2019 um 8:15 Uhr

  • In meinem Fall war es auch ein Hosting-Problem. Es war eine htaccess-Datei, die sie geändert und einige neue Regeln für bestimmte PHP-Versionen hinzugefügt haben. Es scheint, dass htaccess Verwirrung zwischen Seiten und auf dem Server installierten PHP-Versionen verursacht hat

    – Vikas Kandari

    21. Oktober 2020 um 7:30 Uhr

Benutzeravatar von D.Sari
D.Sari

In meinem Fall bestand die Lösung darin, unterschiedliche Parameternamen in $_GET und $_SESSION zu haben.

$_SESSION["businessid"] = $_GET["businessid"]; // Leads to problems with session.
$_SESSION["business_id"] = $_GET["businessid"]; //Works perfectly.

Es klingt seltsam, aber das ist meine Erfahrung.

  • Es wäre schön zu wissen, was es war.

    – Bernhard

    14. Januar 2019 um 8:15 Uhr

  • In meinem Fall war es auch ein Hosting-Problem. Es war eine htaccess-Datei, die sie geändert und einige neue Regeln für bestimmte PHP-Versionen hinzugefügt haben. Es scheint, dass htaccess Verwirrung zwischen Seiten und auf dem Server installierten PHP-Versionen verursacht hat

    – Vikas Kandari

    21. Oktober 2020 um 7:30 Uhr

Benutzeravatar von eldhose
eldhose

Die einzige Lösung für dieses Problem ist die Verwendung session_start(); oben auf jeder Seite. Es wird gut funktionieren. Andernfalls müssen Sie sich möglicherweise wegen dieses Problems an Ihren Hosting-Provider wenden.

  • Bei der Beantwortung einer acht Jahre alten Frage mit neun bestehenden Antworten ist es hilfreich zu erklären, welchen neuen Aspekt der Frage Ihre Antwort anspricht. Beachten Sie auch, ob die Antwort funktioniert hätte, als die Frage gestellt wurde, oder ob sie von etwas abhängt, das sich in diesen acht Jahren geändert hat.

    – Jason Aller

    12. September 2019 um 19:16 Uhr

  • session_start() wird in OPs Codebeispielen gesetzt. hast du überhaupt gelesen, bevor du geantwortet hast?

    – Craig B

    24. August um 2:28 Uhr

1403910cookie-checkSitzungsvariablen bleiben zwischen Seitenladevorgängen nicht bestehen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy