2016-08-06 2 views
2

Dies ist eine sehr spezifische Frage zum genauen Anrufen session_regenerate_id(). Besteht zwischen dem Aufruf von session_regenerate_id() vor oder nach dem Festlegen eines sicheren Werts in der Sitzung ein Unterschied oder ein Sicherheitsrisiko?Sitzungs-ID nach oder vor dem Festlegen eines sicheren Werts neu generieren

Bevor Wert einstellen:

if ($login_success) { 

    session_regenerate_id(true); 
    $_SESSION['login_status'] = 'logged_in'; 

} 

oder nach dem Wert in der Sitzung Einstellung:

if ($login_success) { 

    $_SESSION['login_status'] = 'logged_in'; 
    session_regenerate_id(true); 

} 

Antwort

2

So funktioniert es, session_regenerate_id() erstellt und ändert die Sitzungs-ID, überträgt die Sitzung in die neue Datei und sendet den Cookie aus. Wenn Sie true als Argument übergeben, wird auch die alte Sitzungsdatei gelöscht. Wenn Sie das Argument weglassen, wird es verlassen.

Also, ob Sie

session_regenerate_id(true); 
$_SESSION['login_status'] = 'logged_in'; 

oder

$_SESSION['login_status'] = 'logged_in'; 
session_regenerate_id(true); 

verwenden ist es das gleiche: info neu geschrieben in die neue Datei und das Cookie gesendet. Ich würde empfehlen, immer true als Argument zu verwenden, um alte Session-Hijacking zu vermeiden.

+0

Ihre Antwort ist vollkommen richtig und ich bin dankbar für die Eingabe, aber es adres das eigentliche Problem nicht. Um Verwirrung für andere Programmierer zu vermeiden, änderte ich die Antwort. Kein Wortspiel beabsichtigt (Ich habe Ihre Antwort upvoted). – Nitin

1

Sie sind effektiv gleich; Sitzungsinformationen werden nur dann beibehalten, wenn session_write_close() aufgerufen wird (oder implizit, wenn das Skript beendet wird). So würden die Daten für die alte ID nicht erhalten bleiben.

+0

Hi @obe können Sie bitte bestätigen, wenn session_regenerate_id() implizit session_write_close() und session_start() aufruft oder müsste ich regenerate kombinieren, Wert ändern, Sitzung schließen und starten, um die Änderungen direkt persistent zu machen? – Nitin

+1

@Nitin, Dies ist PHP, Ihre Transaktion wird bald beendet und die Header (Cookie) an den Client senden. Also, imo, keine Notwendigkeit, die Sitzung nach einer Neugenerierung zu schließen und neu zu starten. –

Verwandte Themen