Was ist die aktuelle, gute Praxis und einfachste Weg, Sitzungen in PHP zu verwenden?

StackOverflow https://stackoverflow.com/questions/96460

  •  01-07-2019
  •  | 
  •  

Frage

Sessions in PHP schien seit dem letzten Mal geändert habe ich sie verwendet, so dass ich mich für eine einfache Möglichkeit, Sitzungen verwenden, aber zugleich für sie relativ sicher und eine gute gängige Praxis sein.

War es hilfreich?

Lösung

Sitzungsverwaltung geändert vor einiger Zeit (ich glaube, es war um 4.4). Der alte Mechanismus funktioniert nach wie vor, aber ist veraltet. Es ist ziemlich verwirrend, so empfehle ich bleibe klar davon. Heute verwenden Sie Sitzungen durch die globale Variable $ _SESSION Zugriff auf (es ist ein Array). Sie können setzen Objektinstanzen in dort, aber Sie müssen die Klassendefinitionen für diese Objekte laden, bevor die Sitzung auf der nächsten Seite beginnen. Mit automatisches Laden können Sie sich hier helfen.

Sie müssen eine Sitzung starten, bevor Sie verwenden können, $ _SESSION. Seit dem Start der Session-Header sendet, können Sie jeden Ausgang vor nicht haben. Dies kann auf zwei Arten gelöst werden: Entweder Sie beginnen immer um die Sitzung zu Beginn des Skripts. Oder Sie alle Ausgaben puffern, und senden Sie es am Ende aus das Skript.

  

Eine gute Idee ist es, die Sitzung auf jede Anfrage zu regenerieren. macht dies viel weniger wahrscheinlich kapern.

Das ist (leicht) schlecht beraten, da es der Ort nicht zugänglich zu machen. Sie sollten die Session-ID regenerieren, wenn sich ein Benutzer Privilegien ändern aber. Im allgemeinen bedeutet das, wann immer sie sich anmelden. Dies ist session-Fixierung (eine Form von sitzungs hijacking) zu verhindern. Siehe dieses letzte Thread @ Sitepoint für mehr zu diesem Thema.

Mit cookiebased Sitzungen nur ist in Ordnung, aber wenn Sie Session-IDs bei der Anmeldung zu regenerieren, spielt es keine zusätzliche Sicherheit hinzufügen, und es senkt die Zugänglichkeit ein bisschen.

Andere Tipps

Was Einfachheit, geht es nicht besser als:

# Start the session manager
session_start(); 

# Set a var
$_SESSION['foo'] = 'whatever';

# Access the var
print $_SESSION['foo'];

Während Datenbank für Sitzungen sicherer sein könnte, sollten Sie konzentrieren sich auf das, was Sie in der Sitzung in erster Linie sind die Speicherung - es ist nicht wirklich alles andere als eine ID enthalten sollte dem Benutzer (und vielleicht auch ein Vorname oder ein zeitweiliger zu identifizieren Variable zwischen den Seiten).

würde ich vorschlagen, einfach die Standard Verwendung von Cookies. Datenbanksitzungen geben einen zusätzlichen Treffer auf jeder Seite, und auch wenn nicht jede Website Slashdot ist, es gibt keinen Schaden in etwas so Einfaches wie das pre-Optimierung.

Für die Nutzung, würde ich die Standard globale Variable empfehlen:

$_SESSION['yourvar'] = 'somevalue';

Wenn Sie diese Methode in allen Ihrem Code verwenden, können Sie bequem das Back-End später durch die Nutzungs ändern session_set_save_handler , die von der Umsetzung Sitzung Backends eine einheitliche Art und Weise gibt. Beachten Sie, dass Sie ein Objekt verwenden können, um alle Session-Handling zu enthalten, einfach geben Arrays zu jedem Eintrag -. Array ( ‚Staticclass‘, ‚static‘)

Für weitergehende Nutzung, würde ich empfehlen, Sie zu sehen, wie Sitzungen behandelt werden, in KohanaPHP .

Sie können speichern PHP-Sessions in der Datenbank, wie in der diese   Buch. Ich habe diese Methode verwendet, und ich finde es sicher und einfach zu implementieren, so würde ich es empfehlen.

kapseln die $ SESSION Array in einer Session () Objekt, das Sie Variablen erhalten von Session ermöglicht, erhalten, und schreiben mit einem ähnlichen (noch dissoziierbaren) Art und Weise, einschließlich der automatischen Sicherheitsfilter, Flash-Variablen (var, die einmal verwendet werden, dann distroyed) und Standardwert Setter.

Werfen Sie einen Blick auf das Verhalten von Symfony zu diesem Punkt, es ist sehr hilfreich.

Sitzungen waren ein wichtiger Teil meiner PHP-Kenntnisse, weil es mir geholfen, meine Log-in-Authentifizierung Problem zu lösen, als ich meine erste Web-Anwendung entwickle.

session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
    if( auth($_POST['username'], $_POST['password']) )
    {
        //Authentication passed
        $_SESSION['user'] = $_POST['username'];
        // redirect to required page
        header( "Location: index.php" );
    } 
    else 
    {
       //Authentication failed redirect to login
       header( "Location: loginform.html" );
    }
} 
else 
{
      //Username and Password are required
      header( "Location: loginform.html" );
}

Zunächst einmal, Gebrauch Cookies in Ihrem Browser nur, wenn Sie einen sehr spezifischen gutes Geschäft Grund müssen nicht. Ich hatte einen Client, der für ein Projekt nur auf url basierten Sessions bestanden. sehr unsicher und ein Schmerz zu arbeiten.

Eine gute Idee ist es, die Sitzung auf jede Anfrage zu regenerieren. dies macht viel weniger wahrscheinlich kapern. Zum Beispiel.

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

Ein andere Sache, die gute Praxis ist, wenn Sie irgendeine Art von Benutzeranmeldung als Teil des Systems sind dabei vollständig entkräften und die Sitzungsdaten auf einem Logout leeren, um sicherzustellen, dass der Benutzer wirklich aus dem System angemeldet ist. Ich habe Systeme gesehen, wo Abmeldung durch Entfernen des Session-Cookie nur erreicht wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top