Was ist die aktuellste, bewährte Methode und einfachste Möglichkeit, Sitzungen in PHP zu verwenden?

Die Sessions in PHP scheinen sich seit der letzten Nutzung geändert zu haben, daher suche ich nach einer einfachen Möglichkeit Sessions zu verwenden, aber gleichzeitig ist es relativ sicher und eine gute allgemeine Praxis.

0

7 Antworten

Sitzungen waren ein kritischer Teil meines PHP-Wissens, da es mir half, mein Login-Authentifizierungsproblem zu lösen, als ich meine erste Webanwendung entwickelte.

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" );
}
0
hinzugefügt

Die Sitzungsverwaltung hat sich vor einiger Zeit geändert (ich denke, es war etwa 4.4). Der alte Mechanismus funktioniert immer noch, ist aber veraltet. Es ist ziemlich verwirrend, also empfehle ich, mich davon fern zu halten. Heute verwenden Sie Sitzungen, indem Sie auf die globale Variable $ _SESSION (es ist ein Array) zugreifen. Sie können Objektinstanzen dort einfügen, aber Sie müssen die Klassendefinitionen für diese Objekte laden, bevor Sie die Sitzung auf der nächsten Seite starten. Die Verwendung von autoload kann Ihnen hier helfen.

Sie müssen eine Sitzung starten , bevor Sie $ _SESSION verwenden können. Da beim Starten der Sitzung Header gesendet werden, können Sie zuvor keine Ausgabe erstellen. Dies kann auf zwei Arten gelöst werden: Entweder beginnen Sie die Sitzung immer am Anfang Ihres Skripts. Oder Sie alle Ausgaben puffern und senden Sie es am Ende der das Skript.

Eine gute Idee ist es, die Sitzung bei jeder Anfrage neu zu erstellen. das macht die Entführung viel weniger wahrscheinlich.

Das ist (ein bisschen) schlechter Rat, da es die Seite unzugänglich machen kann. Sie sollten die Sitzungs-ID immer wieder neu erstellen, wenn ein Benutzer vorhanden ist Privilegien ändert sich jedoch. Im Allgemeinen bedeutet das, wann immer sie sich einloggen. Dies dient dazu, eine Sitzfixierung zu verhindern (eine Form von Session-Hijacking). Weitere Informationen zum Thema finden Sie diesen aktuellen Thread @ Sitepoint .

Die Verwendung von Cookie-basierten Sitzungen only ist in Ordnung, aber wenn Sie die Sitzungs-IDs beim Anmelden neu generieren, wird keine zusätzliche Sicherheit hinzugefügt und die Zugänglichkeit wird ein wenig verringert.

0
hinzugefügt
Schau genau. Regeneriere Session-IDs ja, aber nur , wenn es nötig ist. Das bedeutet, wenn sich der Benutzer anmeldet.
hinzugefügt der Autor troelskn, Quelle
Ich bin zu diesem SitePoint-Forum gegangen und habe es mir angesehen. von dem, was ich sehen kann, scheinen sie tatsächlich Id Regeneration zu empfehlen und Cookie nur insgesamt zu verwenden.
hinzugefügt der Autor Laith, Quelle
Nicht jeder im Thread stimmt dieser Haltung zu
hinzugefügt der Autor Laith, Quelle

Kapselung des $ SESSION-Arrays in einem Session() -Objekt, mit dem Sie Variablen aus Session, Get und Post auf ähnliche (und dennoch dissoziierbare) Weise abrufen können, einschließlich automatischer Sicherheitsfilter, Flash-Variablen (var, die einmal verwendet und dann zerstört werden), und Standardwert-Setter.

Schauen Sie sich das Verhalten von Symfony in diesem Punkt an, es ist sehr hilfreich.

0
hinzugefügt

Zunächst einmal, verwenden Sie nur Cookie-basiert, es sei denn, Sie haben einen sehr spezifischen guten Geschäftsgrund nicht zu. Ich hatte einen Kunden, der nur auf URL-basierten Sitzungen für ein Projekt bestand. sehr unsicher und ein Schmerz zu arbeiten.

Eine gute Idee ist es, die Sitzung bei jeder Anfrage neu zu erstellen. das macht die Entführung viel weniger wahrscheinlich. Beispielsweise.

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

Eine weitere gute Methode ist, wenn Sie eine Art Benutzeranmeldung als Teil des Systems durchführen, die Sitzungsdaten bei einer Abmeldung vollständig ungültig machen und leeren, um sicherzustellen, dass der Benutzer wirklich vom System abgemeldet wird. Ich habe Systeme gesehen, bei denen das Abmelden nur durch das Entfernen des Sitzungscookies erreicht wird.

0
hinzugefügt

Was die Einfachheit betrifft, wird es nicht besser als:

# Start the session manager
session_start(); 

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

# Access the var
print $_SESSION['foo'];
0
hinzugefügt

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

0
hinzugefügt

Obwohl die Datenbank für Sitzungen sicherer sein könnte, sollten Sie sich auf das konzentrieren, was Sie in der Sitzung speichern. Sie sollte eigentlich nur eine ID enthalten, um den Benutzer zu identifizieren (und möglicherweise einen Vornamen oder eine temporäre Variable zwischen den Seiten) ).

Ich würde vorschlagen, einfach den Standard, Cookies zu verwenden. Datenbanksitzungen geben einen zusätzlichen Treffer auf JEDE SEITE, und obwohl nicht jede Seite ein Schrägstrich ist, ist es nicht schaden, etwas so einfach wie möglich zu optimieren.

Zur Verwendung würde ich die globale Standardvariable empfehlen:

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

Wenn Sie diese Methode in Ihrem gesamten Code verwenden, können Sie das Back-End später mithilfe von session_set_save_handler , was eine einheitliche Methode zur Implementierung von Session-Backends bietet. Beachten Sie, dass Sie ein Objekt verwenden können, um die gesamte Sitzungsbehandlung zu enthalten, geben Sie einfach Arrays für jeden Eintrag - Array ('Staticclass', 'staticmethod').

Für eine ausführlichere Verwendung würde ich empfehlen, dass Sie sich ansehen, wie Sitzungen in KohanaPHP behandelt werden.

0
hinzugefügt
PHP - Deutsche Gemeinschaft
PHP - Deutsche Gemeinschaft
5 der Teilnehmer

In dieser Gruppe sprechen wir über PHP. Partner: de.switch-case.com