PHP-Sitzung ohne Cookies

Gibt es eine Möglichkeit, eine persistente Sitzung in PHP ohne die Platzierung eines SessionCookies zu initiieren? Gibt es andere Möglichkeiten zum Verwalten einer Sitzung über mehrere Seiten hinweg, z. B. eine IP-Adress-basierte Lösung?

Mein Grund zu fragen ist, dass, obwohl die meisten Benutzer Cookies haben, ich sehen möchte, ob es ein Weg für ein Login-System für diejenigen mit deaktivierten funktioniert (obwohl ich denke, Deaktivieren von Cookies ist nur unnötige Paranoia, persönlich).

   

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

Andernfalls können Sie Ihre session.use_only_cookies auf “0” setzen, um das session.use_only_cookies einer Sitzungs-ID an URLs in Ihrem PHP zu erzwingen. Dieser Ansatz hat jedoch einige Nachteile. Hauptsächlich, dass der Status innerhalb der URL beibehalten wird, im Gegensatz zum Cookie-Header. Wenn ein Benutzer die URL der Seite kopieren und einfügen würde, auf der er sich befand, und eine andere Person 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(); 

Sie können den ini-Wert von session.use_trans_sid auf true setzen, um das Anhängen der Sitzungs-ID an jede URL zu aktivieren. Schau dir das an.

Aus Sicherheitsgründen sollten Sie dann die Sitzung auf die IP beschränken, die die Sitzung erstellt hat. Dies ist jedoch nicht vollkommen sicher, da jemand mit der gleichen IP (beispielsweise hinter einem Proxy) dieselbe Sitzung wiederverwenden kann.

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 Wireless-Karte unterwegs sind und Proxy-Server dieselbe IP-Adresse haben. Beim Klicken auf eine alte URL (mit der alten Sitzungs-ID) kann es leicht beschädigt werden.

Möglicherweise möchten Sie auch eine eigene Sitzungsfunktion (in Verbindung mit einer database) erstellen. Sie würden die Sitzungs-ID ignorieren und sie an die IP-Adresse binden. (Siehe Beispiele in http://php.net/manual/en/function.session-set-save-handler.php )

Verweise:

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

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

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

Nach session_start() speichere session_id in der Tabelle und erhalte es später aus der Tabelle (nach IP und anderen Bedingungen) und rufe dann an

 session_id($in_table_session_id); 

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

Sie könnten einen databasedatensatz oder eine temporäre Datei erstellen und $_SERVER jedem Laden der Seite $_SERVER vars gegen die Anfrage prüfen. Es ist ein Sicherheitsrisiko, aber mit genügend Variablen (schauen Sie sich die Liste hier an ), haben Sie vielleicht das Gefühl, dass Sie die Chance haben, auf ein akzeptables Niveau herunterzufallen; Nur Sie wissen, wie sicher Ihre App sein muss.

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