wake-up-neo.net

PHP Sitzung ohne Cookies

Gibt es eine Möglichkeit, eine persistente Sitzung in PHP ohne das Platzieren eines Sitzungscookies zu initiieren? Gibt es andere Möglichkeiten, eine Sitzung über mehrere Seiten hinweg aufrechtzuerhalten, z. B. eine auf IP-Adressen basierende Lösung?

Mein Grund zu fragen ist, dass die meisten Benutzer zwar Cookies haben, aber ich möchte herausfinden, ob es ein System für Anmeldesysteme gibt, bei dem es deaktiviert ist (obwohl ich denke, dass das Deaktivieren von Cookies für mich persönlich nur unnötige Paranoia ist).

52
Delan Azabani

Ich denke nicht, dass es zu viel ist, wenn Sie Ihre Benutzer bitten, Cookies zu aktivieren. Ich finde es dumm, wenn die Leute sie ganz abstellen.

Andernfalls können Sie Ihren session.use_only_cookies auf "0" setzen, um das Anhängen einer Sitzungs-ID an URLs in Ihrem PHP zu erzwingen. Dieser Ansatz hat jedoch mehrere Nachteile. Hauptsächlich das Beibehalten des Status innerhalb der URL im Gegensatz zum Cookie-Header. Wenn ein Benutzer die URL der Seite, auf der er sich befand, kopiert und eingefügt hat und eine andere Person darauf klickt, verwenden beide dieselbe Sitzung.

<?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();
56
PureForm

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

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

5
halfdan

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 Proxyserver haben dieselbe IP-Adresse. Wenn Sie auf "eine alte URL" klicken (mit der alten Sitzungs-ID), kann sie leicht abgebrochen werden.

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

Verweise:

3
Lekensteyn

Sie können einen Datenbankdatensatz oder eine temporäre Datei erstellen und $_SERVER vars mit der Anforderung bei jedem Laden der Seite prüfen. Es ist ein Sicherheitsrisiko, aber mit genügend Variablen (sehen Sie sich die Liste hier an), haben Sie vielleicht das Gefühl, dass Sie die Chance haben, dass Hijack ein akzeptables Niveau erreicht. Nur Sie wissen, wie sicher Ihre App sein muss.

0
gedq

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

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

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

nach session_start() speichern Sie session_id in der Tabelle und erhalten sie später von der Tabelle (per IP und anderen Bedingungen) und rufen dann auf

session_id($in_table_session_id);

weitere Informationen und einen vollständigen Leitfaden finden Sie unter: https://Gist.github.com/mimrahe/77415f4a9e238c313bbe8c42f8a6b7fe

0
user6558741

Die richtige Antwort 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, damit ich weiß, dass Sie beim nächsten Aufruf" Sie "sind." Das bedeutet, dass diese Person in diesem Browser (unabhängig von der Registerkarte), die zu diesem Zeitpunkt ausgeführt wird, ein eindeutiges Token hat.

Wenn und nur wenn sie sich erfolgreich angemeldet haben, kann dieses Token jetzt an eine Sitzung auf der Serverseite gebunden werden. Token sollen so lang und willkürlich sein, dass niemand rechtzeitig eine erraten kann.

Mehrere Browser könnten dieselbe IP-Adresse verwenden. Für mehrere Personen kann der gleiche Benutzeragent EXACT verwendet werden. Ein Cookie ist das einzige Speichersystem, das funktioniert.

Es gibt einen weiteren Weg, und zwar das Hinzufügen des eindeutigen Tokens zu jedem einzelnen Link zurück zum Server sowie allen AJAX -Aufrufen, wie ?PHPSESSID=my-unique-token-189481958 -, aber das macht Code schwer.

0
Oliver Williams

Wenn ich das tun wollte, füge ich die Sitzungs-ID im HTML-Code als Kommentar-Tag hinzu und verwende und konfiguriere den PHP - Code, 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 die URL einzufügen.

0
Aryan amish