Bei Start per F5 sind alte Sessiondaten nicht mehr gültig.

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Bei Start per F5 sind alte Sessiondaten nicht mehr gültig.

Beitrag von Kurzer »

Moin,

ich bin gerade etwas in Panik.

Ich habe bisher meine PHP Funktionen und Klassen mit einer HTML-Formularseite debuggt und getestet.
Hier funktioniert z.B. auch die Sessionverwaltung. Sprich, ich kann mich als User anmelden und abmelden.
Und ich kann die Funktionen auch nur nutzen, wenn ich korrekt angemeldet bin.

Hier als Beispiel eine Login-Funktion. Sie gibt eine entsprechend Meldung zurück, wenn ich bereits eingeloggt bin.

Bild

Wie man sieht, meldet die PHP Datei bzw. die darin aufgerufene Sessionverwaltung, dass der User bereits eingeloggt ist.

Das Problem: Wenn ich das mit meinem SpiderBasic Testcode versuche, dann ist bei jedem HTTPRequest() wieder kein User angemeldet, obwohl ich mich zuvor angemeldet habe. Es scheint, als würde bei jedem HTTPRequest() auf der Serverseite eine neue, unabhängige Session gestartet werden. Ich weiß nur nicht warum, denn es wird genau die gleiche PHP Datei aufgerufen wie bei dem Test mit dem HTML Formular.

Bild

Hat jemand einen Tipp hierzu? Das ist für das Projekt momentan ein echter Showstopper. :cry:

Markus

Nachtrag:

Es scheint mit dem Erlauben von CORS zu tun zu haben. Meine PHP Scripte enthalten folgenden Header, damit ich den Code aus der SpiderBasic-IDE heraus starten kann.

Code: Alles auswählen

if (is_file (_ATS_CONFIG_DIR_ . 'LÖSCH MICH AUF DEM ECHTSYSTEM.txt')) {
  header("Access-Control-Allow-Origin: *");
}
Wenn ich meinen SpiderBasic Testcode compiliere und das Kompilat dann direkt in den httpdoc Pfad meines lokalen Servers kopiere, dann funktioniert die Sessionverwaltung korrekt. Das ist nur leider sehr aufwändig.

Hat jemand eine Idee wie ich das anders lösen kann?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Bei Start per F5 sind alte Sessiondaten nicht mehr gülti

Beitrag von Kiffi »

kann ich jetzt nicht auf Anhieb nachvollziehen. Habe ein kleine PHP-Testseite angelegt, die beim ersten Mal eine Session-Variable setzt. Bei nochmaligem Aufruf ist die Variable noch immer gesetzt.

Code: Alles auswählen

<?php
header("Access-Control-Allow-Origin: *");
// Start the session
session_start();
// Set session variables
// $_SESSION["favanimal"] = "cat"; // bei erstmaligem Aufruf war diese Zeile nicht kommentiert.
echo $_SESSION["favanimal"]; // liefert "cat"
?>

Code: Alles auswählen

Procedure Callback(Success, Result.s)
  Debug Result ; -> cat
EndProcedure

HTTPRequest(#PB_HTTP_Get, "http://localhost/PhpSessionTest/test.php", "", @Callback())
Hygge
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Bei Start per F5 sind alte Sessiondaten nicht mehr gülti

Beitrag von Kurzer »

Das ist komisch. Du hast den Code per F5 ausgeführt?

Ich habe es mal etwas erweitert und das Problem tritt bei mir definitiv auf.

kiffi.php

Code: Alles auswählen

<?php
header("Access-Control-Allow-Origin: *");

session_start();
echo session_id() . ':  ';

if (!isset($_SESSION["favanimal"])) {
	$_SESSION["favanimal"] = "cat";
	echo 'Variable wurde gesetzt.';
} else {
	echo 'Sessionvariable: ' . $_SESSION["favanimal"];
}
?>
Spider code

Code: Alles auswählen

Procedure Callback(Success, Result.s)
  Debug Result
EndProcedure

Procedure Send()
	HTTPRequest(#PB_HTTP_Get, "http://127.0.0.1/atsticket/kiffi.php", "", @Callback())
EndProcedure


OpenWindow(0, 400, 340, 300, 80, "Test")
ButtonGadget(0, 10, 10, 280, 25, "Test")
BindGadgetEvent(0, @Send(), #PB_EventType_LeftClick)
Bild

Nachtrag: Die Session ID ändert sich jedes mal!
Ich habe den PHP Code oben angepasst, damit sieht man das.

Bild
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Bei Start per F5 sind alte Sessiondaten nicht mehr gülti

Beitrag von Kiffi »

So klappt es:

diese Zeile am Anfang Deines SB-Codes einmalig aufrufen:

Code: Alles auswählen

! $.ajaxSetup({xhrFields: { withCredentials: true } });
Erläuterung: Siehe hier.

Das bedingt allerdings, dass Du in der PHP-Datei 'Access-Control-Allow-Origin' nicht mehr auf 'alles' (Sternchen) setzen darfst, sondern Deine Client-URL explizit angeben musst:

Code: Alles auswählen

header("Access-Control-Allow-Origin: http://127.0.0.1:9080");
Zusätzlich musst Du 'Access-Control-Allow-Credentials' auf 'true' setzen:

Code: Alles auswählen

header("Access-Control-Allow-Credentials: true");
Gesamter PHP-Code:

Code: Alles auswählen

<?php
header("Access-Control-Allow-Origin: http://127.0.0.1:9080");
header("Access-Control-Allow-Credentials: true");

session_start();

if (!isset($_SESSION["favanimal"])) {
   $_SESSION["favanimal"] = "cat";
   echo 'Variable wurde gesetzt.';
} else {
   echo 'Sessionvariable: ' . $_SESSION["favanimal"];
}
?>
Grüße ... Peter
Hygge
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Bei Start per F5 sind alte Sessiondaten nicht mehr gülti

Beitrag von Kurzer »

:praise: Tausend dank, Peter!
Da hätte ich sicherlich sehr lange dran gesessen. Funktioniert jetzt alles erste Sahne. :allright:

Gruß Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten