PHP session funktioniert nicht in Safari?

2 Antworten

Sofern du in Safari nicht „Alle Cookies blockieren“ aktiviert hast, hat Safari erst mal keine genrellen Problem mit PHP-Sessions. Ohne den Code zu kennen, kann man da aber auch nur raten. Möglicherweise führst du session_destroy() auch mal ohne Logout aus oder irgendwas anderes läuft da schief.

Auf jeden Fall solltest du vor dem Testen immer erst mal alle lokalen Cookies löschen (oder zumindest alle zu deiner Domain gehörenden). Manchmal schlägt ein „übrig gebliebener“ Cookie quer.

Woher ich das weiß:Berufserfahrung – Entwickle seit > 20 Jahren Anwendungen mit PHP.
pst0042 
Fragesteller
 03.11.2019, 12:31

Ich gehe mal davon aus, dass die Option in Safari nicht aktiviert ist, da ich das Problem auch schon bei mehreren Bekannten hatte, ich schaue aber zur Sicherheit mal bei mir nach.

Cookies lösche ich immer, bekomme aber trotzdem den gleichen Fehler.

Die Möglichkeit, dass session_destroy() auch so ausgeführt wird, hatte ich mir auch schon überlegt, habe aber gerade auf einer anderen Seite von mir geschaut, wo ich keinen Logout habe und session_destroy() auch nicht verwendet habe und das Problem besteht auch hier.

In meinem Kommentar unten hatte ich ja herausgefunden, dass ich auf der 2. Seite eine neue ID bekomme, gibt es da einen Grund / eine Lösung?

0
Babelfish  03.11.2019, 12:46
@pst0042
In meinem Kommentar unten hatte ich ja herausgefunden, dass ich auf der 2. Seite eine neue ID bekomme, gibt es da einen Grund / eine Lösung?

Genau das deutet darauf hin, dass du die Session beendest.

Safari verhält sich hier nicht anderes als andere Browser. Ein Session-Cookie wird vom Server gesendet und im Browser gespeichert. Bei jedem Request sendet Safari dann den Cookie mit und PHP auf dem Server erkennt anhand der Session-ID aus dem Cookie ob eine Session existiert und führt diese dann weiter. Wird keine lokale Session gefunden (weil bspw. mit session_destroy() beendet), wird eine neue Session gestartet und ein neuer Cookie mit neuer Session-ID gesendet.

Wie schon gesagt, ohne Code kann man hier nur raten aber kaum helfen. Safari hat definitiv kein Problem mit PHP-Session-IDs. Wenn du den ganzen Code nicht rausgeben kann, dann versuche ein minimales Testcase zu erstellen, in welchem du das Verhalten reproduzieren kannst. Dann stell den Code hier mal rein.

Möglicherweise arbeitest du auch mit Sub-Domains. Ein Cookie für www.example.com ist nicht zwangsweise auch für test.example.com pder example.com gültig.

0
pst0042 
Fragesteller
 03.11.2019, 13:37
@Babelfish

Ich habe jetzt mal mit 2 Testdateien getestet.

Datei 1:

<?php
session_start();
echo session_id();
?>
<html>
<body>
Dies ist ein Testtext in Datei 1
<?php
$testvar = "Hello World";
$_SESSION['test'] = $testvar;
?>
<a href="datei2.php">Link zu Datei 2</a>
</body>
</html>

Datei 2:

<?php
session_start();
echo session_id();
?>
<html>
<body>
Dies ist ein Testtext in Datei 2
<?php
$testvar = $_SESSION['test'];
echo $testvar;
?>
</body>
</html>

Außerdem habe ich hiermit das Problem herausgefunden, da die Dateien auf dem Webserver so funktionieren, auch in Safari:

Ich habe die Dateien im Normalfall auf einer Vereins-Jimdo-Seite, um nicht alles selbt schreiben zu müssen, mit einem IFrame eingebunden. Unter Windows oder Android wird auch die Session von session_start() erkannt. Bei iOS und Mac hingegen wird, warum auch immer, die Session nicht erkannt und eine neue gestartet. Vielleicht wisst ihr ja eine Lösung dazu?

Ansonsten bleibt mir wohl nichts, außer mich nach einem CMS direkt auf dem Webserver umzuschauen oder die ganze Seite selbst zu schreiben...

Auch wenn die Lösung des Problems in eine etwas andere Richtung ging, als ich dachte, trotzdem Danke an alle Antworten. Ich hatte es nur noch nie direkt auf dem Server getestet, da die Schrift auf dem Server weiß ist, da das IFrame auf der Jimdo-Seite transparent ist und der Hintergrund recht dunkel.

0
Babelfish  03.11.2019, 13:50
@pst0042

Bei IFRAMEs können verschiedene Punkte ursächlich am Problem sein. Einmal die schon angesprochene Domain. Eher wird es aber mit dem Cross-Site-Tracking-Schutz von Safari zusammenhängen, der deinen IFRAME als Werbung/Tracker klassifiziert und daher Cookies einschränkt (Stichwort: Third Party Cookies).

Da gibt es zwar auch ein paar Wege, wie man das trotzdem nutzen kann aber da braucht man schon mehr Informationen und generell würde ich davaon abraten und keine IFRAMEs dafür nutzen. Jeder Browser behandelt das etwas anders und es wird ziemlich schwierig das richtig umzusetzen.

0
pst0042 
Fragesteller
 03.11.2019, 14:43
@Babelfish

Ok danke. D.h. es wäre besser, einfach die komplette Seite selbst zu schreiben?

0
Babelfish  03.11.2019, 14:59
@pst0042

Kann ich nicht beurteilen, da ich nicht weiß was du genau machen willst. Von Jimdo würde ich aber in jedem Fall abraten und mit einem eigenen CMS ist man natürlich immer flexibler. Ich nutze bspw. Contao und muss mir da um eine Nutzerverwaltung keine Gedanken machen, da sie schon dabei ist und bei Bedarf beliebig erweitert werden kann.

0
pst0042 
Fragesteller
 03.11.2019, 15:06
@Babelfish

Ok, danke. Dann schaue ich mich mal bei verschiedenen CMS um.

0

Teste mal zur Sicherheit, ob du auf der Folgeseite überhaupt eine Session hast. Normalerweise wird ein Cookie gesetzt, in dem die SessionID steht. Wenn der Cookie nicht gesetzt werden kann hast du auch keine Session. Also auf beiden Seiten mit echo session_id() erst mal schauen, ob die ID vorhanden und die gleiche ist.

pst0042 
Fragesteller
 03.11.2019, 12:12

Unter Chrome und Firefox ist die ID die gleiche, Safari teste ich jetzt auch gleich.

0
pst0042 
Fragesteller
 03.11.2019, 12:15

Wenigstens der Grund ist jetzt klar: in Safari wird auf der 2. Seite eine neue ID erstellt.

0
Gwarn  03.11.2019, 14:29
@pst0042

Du kannst die SessionID auch an die URL hängen, dann brauchst du keinen Cookie. Das sollte dann auch im Safari funktionieren.

0