PHP-Session ohne Cookies

Lesezeit: 6 Minuten

Gibt es eine Möglichkeit, eine dauerhafte Sitzung in PHP zu initiieren, ohne ein Sitzungscookie zu platzieren? Gibt es andere Möglichkeiten, eine Sitzung seitenübergreifend aufrechtzuerhalten, z. B. eine auf IP-Adressen basierende Lösung?

Mein Grund für die Frage ist, dass, obwohl die meisten Benutzer Cookies aktiviert haben, ich sehen möchte, ob es eine Möglichkeit gibt, wie ein Anmeldesystem für diejenigen funktioniert, bei denen es deaktiviert ist (obwohl ich persönlich denke, dass das Deaktivieren von Cookies nur unnötige Paranoia ist).

PHP Session ohne Cookies
Reiner Form

Ich denke nicht, dass es zu viel ist, Ihre Benutzer zu bitten, Cookies zuzulassen. Ich finde es albern, wenn Leute sie komplett ausschalten.

Andernfalls können Sie Ihre einstellen session.use_only_cookies auf “0”, um das Anhängen einer Session-ID an URLs in Ihrer PHP-Datei zu erzwingen. Dieser Ansatz hat jedoch mehrere Nachteile. Hauptsächlich, den Status innerhalb der URL zu halten, im Gegensatz zum Cookie-Header. Wenn ein Benutzer die URL der Seite, auf der er sich gerade befindet, kopieren und einfügen würde und jemand anderes darauf klicken würde, würden beide dieselbe Sitzung verwenden.

<?php
     ini_set("session.use_cookies", 0);
     ini_set("session.use_only_cookies", 0);
     ini_set("session.use_trans_sid", 1);
     ini_set("session.cache_limiter", "");
     session_start();

  • Ich glaube, der OP wollte session.use_cookies auf 1 setzen

    – Ihr gesunder Menschenverstand

    18. September 2010 um 8:27 Uhr

  • Und es sollte beachtet werden, dass diese Einstellungen JS-Hyperlinks und Location-Header im PHP-Code nicht ändern.

    – Ihr gesunder Menschenverstand

    18. September 2010 um 8:33 Uhr

  • “(Sogar die Spinnen können jetzt Kekse haben)” Aww. 🙂 Ich sage lass sie, auch wenn es ihnen Fettpölsterchen gibt.

    – Henrik Erlandsson

    8. Dezember 2010 um 20:26 Uhr


  • Facebook-Apps laufen in einem IFrame, das unter IE keine Cookies speichern darf (Standard-Sicherheitseinstellungen)

    – w43L

    28. Juni 2011 um 8:03 Uhr

  • @w43L marco.org/2007/04/27/…

    – sleepy_keita

    3. März 2013 um 2:14 Uhr

Sie können den ini-Wert von festlegen session.use_trans_sid auf true, um das Anhängen der Session-ID an jede URL zu aktivieren. Schau mal rein Das.

Aus Sicherheitsgründen sollten Sie die Sitzung dann auf die IP beschränken, die die Sitzung erstellt hat. Dies ist jedoch nicht vollkommen sicher, da jemand mit derselben IP (z. B. hinter einem Proxy) dieselbe Sitzung wiederverwenden könnte.

PHP Session ohne Cookies
Lekenstein

Sie können mit Sitzungs-IDs in URLs arbeiten und Cookies deaktivieren mit:

ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
// IP check
if($_SESSION['ip_check'] != $_SERVER['REMOTE_ADDR']){
   session_regenerate_id();
   session_destroy();
   session_start();
}
$_SESSION['ip_check'] = $_SERVER['REMOTE_ADDR'];
// session stuff

Hinweis: Es wird dringend davon abgeraten, Sitzungs-IDs in URLs zu verwenden. IP-Adressen können sich ändern, wenn Sie mit einer WLAN-Karte unterwegs sind, und Proxy-Server haben dieselbe IP-Adresse. Es ist leicht kaputt, wenn man auf „eine alte URL“ (mit der alten Sitzungs-ID) klickt.

Sie könnten auch daran interessiert sein, Ihre eigene Session-Handling-Funktion (in Verbindung mit einer Datenbank) zu erstellen. Sie würden die Sitzungs-ID ignorieren und an die IP-Adresse binden. (siehe Beispiele in http://php.net/manual/en/function.session-set-save-handler.php)

Verweise:

  • Die Bindung an eine IP-Adresse scheint ein schlechter Weg zu sein. Einige (Unternehmens-?) Benutzer können sich hinter einem Proxy befinden, wo mehrere Benutzer dieselbe IP-Adresse haben können.

    – Leander

    30. Mai 2013 um 11:22 Uhr

  • @Leander Wooord! Dies kann zu sehr schlimmen Situationen führen, in denen die gesamte Firma / Familie / Studentenwohnanlage Zugriff auf Ihr Benutzerkonto hat.

    – Sliq

    26. August 2013 um 17:59 Uhr

  • Hier in Deutschland hat der größte ISP (Telekom) sogar einen eigenen Proxy bekommen, den viele Leute nutzen. Im schlimmsten Fall wird also ein ganzes ISP-Netzwerk ein Konto verwenden. Das ist wirklich ärgerlich, da es fast unmöglich ist, IP-Adressen zu sperren, wenn Sie sich nicht auf den X-HTTP-Forwarded-For-Header verlassen wollen.

    – Gelweiler

    16. August 2014 um 8:28 Uhr

Sie könnten einen Datenbankeintrag oder eine temporäre Datei erstellen und überprüfen $_SERVER vars gegen die Anfrage bei jedem Laden der Seite. Es ist ein Sicherheitsrisiko, aber mit genügend Variablen (siehe Liste Hier) haben Sie vielleicht das Gefühl, dass Sie die Chance auf eine Entführung auf ein akzeptables Maß gesenkt haben; nur Sie wissen, wie sicher Ihre App sein muss.

Sie können die Sitzungs-ID pro IP in der Datenbank speichern:

Erstellen Sie eine MySQL-Tabelle mit drei Feldern: session_id, ip und eindeutiger temporärer Schlüssel (für angemeldete Benutzer) oder jede andere Bedingung, die Sie mögen. Deaktivieren Sie dann Sitzungscookies und use_trans_sid.

Erstellen Sie dann einen Code, um das Sitzungsverhalten basierend auf dieser neuen Tabelle zu verwalten!

nach dem session_start() Session_id in der Tabelle speichern und später aus der Tabelle erhalten (nach IP und jeder anderen Bedingung) und dann aufrufen

session_id($in_table_session_id);

Weitere Informationen und eine vollständige Anleitung finden Sie unter: https://gist.github.com/mimrahe/77415f4a9e238c313bbe8c42f8a6b7fe

  • Auch dies ist nach IP bindend und nicht insgesamt effektiv, insbesondere für Bereiche, in denen mehrere Benutzer dieselbe IP teilen (z. B. Proxys von Universitäten, Unternehmen oder Organisationen usw.).

    – Mike Kormendy

    11. Oktober 2017 um 22:52 Uhr

  • @T30 Der Link “Weitere Informationen und eine vollständige Anleitung finden Sie unter:” ist fehlerhaft – das Poster ist “tot”. Hast du dazu einen Link? Danke.

    – dromley

    26. April 2018 um 15:02 Uhr


  • Nein, sorry, auch eine schnelle Suche auf Archiv.org bringt kein ergebnis…

    – T30

    26. April 2018 um 16:04 Uhr

1646509453 369 PHP Session ohne Cookies
Jonjbar

Wenn ich das tun wollte, würde ich die Sitzungs-ID im HTML-Code als Kommentar-Tag hinzufügen und den PHP-Code verwenden und konfigurieren, um diese Sitzungs-ID zu verwenden, die im HTML-Code enthalten ist. Ich denke, es wird relevanter sein, dies zu tun, anstatt es mit der Benutzer-IP zu tun oder die Sitzungs-ID in der URL hinzuzufügen.

  • Auch dies ist nach IP bindend und nicht insgesamt effektiv, insbesondere für Bereiche, in denen mehrere Benutzer dieselbe IP teilen (z. B. Proxys von Universitäten, Unternehmen oder Organisationen usw.).

    – Mike Kormendy

    11. Oktober 2017 um 22:52 Uhr

  • @T30 Der Link “Weitere Informationen und eine vollständige Anleitung finden Sie unter:” ist fehlerhaft – das Poster ist “tot”. Hast du dazu einen Link? Danke.

    – dromley

    26. April 2018 um 15:02 Uhr


  • Nein, sorry, auch eine schnelle Suche auf Archiv.org bringt kein ergebnis…

    – T30

    26. April 2018 um 16:04 Uhr

1646509454 950 PHP Session ohne Cookies
Oliver Williams

Die richtige Antwort darauf ist NEIN. Die Verwendung einer beliebigen Kombination von Variablen außer einem Cookie ist unsicher.

Denken Sie darüber nach: Wenn ein Benutzer ZUERST eine Seite anfordert, sendet der Server die Seite zusammen mit einem eindeutigen Wert, der besagt: „HTTP ist zustandslos, behalten Sie dies bei, damit ich weiß, dass Sie es beim nächsten Anruf sind“. Das bedeutet, dass diese Person in diesem Browser (unabhängig von der Registerkarte), der zu diesem Zeitpunkt ausgeführt wird, über ein eindeutiges Token verfügt.

Nur wenn sie sich erfolgreich angemeldet haben, kann dieses Token jetzt serverseitig an eine Sitzung gebunden werden. Token sollen so lang und zufällig sein, dass niemand rechtzeitig einen erraten kann.

Mehrere Browser könnten dieselbe IP-Adresse verwenden. Mehrere Personen könnten genau denselben Benutzeragenten haben. Ein Cookie ist das einzige Speichersystem, das funktioniert.

Es gibt tatsächlich noch einen weiteren Weg, nämlich das eindeutige Token hinzuzufügen jeder einzelne Link zurück zum Server sowie alle AJAX-Aufrufe, wie ?PHPSESSID=my-unique-token-189481958 – aber das ist ein Schmerz zu codieren.

949210cookie-checkPHP-Session ohne Cookies

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

Privacy policy