Suche…


Syntax

  • void session_abort (void)
  • int session_cache_expire ([Zeichenfolge $ new_cache_expire])
  • void session_commit (void)
  • Zeichenfolge session_create_id ([Zeichenfolge $ Präfix])
  • bool session_decode (Zeichenfolge $ data)
  • bool session_destroy (void)
  • Zeichenfolge session_encode (void)
  • int session_gc (void)
  • array session_get_cookie_params (void)
  • string session_id ([string $ id])
  • bool session_is_registered (Zeichenfolge $ name)
  • Zeichenfolge session_module_name ([string $ module])
  • String Sitzungsname ([String $ Name])
  • bool session_regenerate_id ([bool $ delete_old_session = false])
  • void session_register_shutdown (void)
  • bool session_register (gemischter $ name [, mixed $ ...])
  • void session_reset (void)
  • Zeichenfolge session_save_path ([string $ path])
  • void session_set_cookie_params (int $ lifetime [, string $ path [, string $ domain [, bool $ secure = false [, bool $ httponly = false]]]])
  • bool session_set_save_handler (aufrufbarer $ open, aufrufbarer $ close, aufrufbarer $ read, aufrufbarer $ write, aufrufbarer $ destroy, aufrufbarer $ gc [, aufrufbarer $ create_sid [, aufrufbarer $ validate_sid [, aufrufbarer $ update_timestamp]]])
  • bool session_start ([array $ options = []])
  • int session_status (void)
  • bool session_unregister (Zeichenfolge $ name)
  • void session_unset (void)
  • void session_write_close (void)

Bemerkungen

Beachten Sie, dass der Aufruf von session_start() auch dann eine PHP-Warnung session_start() , wenn die Sitzung bereits gestartet ist.

Sitzungsdaten bearbeiten

Die Variable $_SESSION ist ein Array, das Sie wie ein normales Array abrufen oder $_SESSION können.

<?php
// Starting the session
session_start();

// Storing the value in session
$_SESSION['id'] = 342;

// conditional usage of session values that may have been set in a previous session
if(!isset($_SESSION["login"])) {
    echo "Please login first";
    exit;
}
// now you can use the login safely
$user = $_SESSION["login"];

// Getting a value from the session data, or with default value, 
//     using the Null Coalescing operator in PHP 7
$name = $_SESSION['name'] ?? 'Anonymous';

Weitere Informationen zum Arbeiten mit einem Array finden Sie unter Manipulieren eines Arrays.

Wenn Sie ein Objekt in einer Sitzung speichern, kann es nur ordnungsgemäß abgerufen werden, wenn Sie über einen Autoloader für Klassen verfügen oder die Klasse bereits geladen haben. Andernfalls wird das Objekt als Typ __PHP_Incomplete_Class , was später zu Abstürzen führen kann . Weitere Informationen zum automatischen Laden finden Sie unter Namespacing und Autoloading.

Warnung:

Sitzungsdaten können gekapert werden. Dies ist beschrieben in: Pro PHP-Sicherheit: Von den Prinzipien der Anwendungssicherheit zur Implementierung von XSS Defense - Kapitel 7: Verhindern von Session-Hijacking Es kann daher dringend empfohlen werden, keine persönlichen Informationen in $_SESSION . Dies würde am kritischsten die Kreditkartennummern , die von der Regierung ausgestellten IDs und die Passwörter beinhalten . Es würde sich aber auch auf weniger Daten ausdehnen, wie Namen , E-Mails , Telefonnummern usw., die es einem Hacker ermöglichen würden, sich als legitimen Benutzer auszugeben. Verwenden Sie in den Sitzungsdaten generell wertlose / nicht persönliche Werte, wie z. B. numerische Bezeichner.

Zerstöre eine ganze Sitzung

Wenn Sie eine Sitzung haben, die Sie zerstören möchten, können Sie dies mit session_destroy() tun.

/*
    Let us assume that our session looks like this:
    Array([firstname] => Jon, [id] => 123)

    We first need to start our session:
*/
session_start();

/*
    We can now remove all the values from the `SESSION` superglobal:
    If you omitted this step all of the global variables stored in the 
    superglobal would still exist even though the session had been destroyed.
*/
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

//Finally we can destroy the session:
session_destroy();

Die Verwendung von session_destroy() unterscheidet sich von etwas wie $_SESSION = array(); SESSION werden alle im SESSION Superglobal gespeicherten Werte SESSION , die tatsächliche gespeicherte Version der Sitzung wird jedoch nicht zerstört.


Hinweis : Wir verwenden $_SESSION = array(); anstelle von session_unset() weil das Handbuch session_unset() festlegt:

Verwenden Sie session_unset () nur für älteren veralteten Code, der $ _SESSION nicht verwendet.

session_start () -Optionen

Beginnend mit PHP-Sitzungen können wir ein Array mit php.ini Optionen für session_start an die Funktion session_start .

Beispiel

<?php
   if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
       // php >= 7 version
       session_start([
          'cache_limiter' => 'private',
          'read_and_close' => true,
       ]);
   } else {
       // php < 7 version
       session_start();
   }
?>

Diese Funktion führt auch eine neue php.ini Einstellung mit dem Namen session.lazy_write ein. Die php.ini true und bedeutet, dass Sitzungsdaten nur dann neu geschrieben werden, wenn sie geändert werden.

Referenzierung: https://wiki.php.net/rfc/session-lock-ini

Sitzungsname

Prüfen, ob Sitzungscookies erstellt wurden

Sitzungsname ist der Name des Cookies, das zum Speichern von Sitzungen verwendet wird. Sie können dies verwenden, um festzustellen, ob für den Benutzer Cookies für eine Sitzung erstellt wurden:

if(isset($_COOKIE[session_name()])) {
    session_start();
}

Beachten Sie, dass diese Methode im Allgemeinen nicht nützlich ist, wenn Sie nicht wirklich unnötig Cookies erstellen möchten.

Sitzungsname ändern

Sie können den Sitzungsnamen aktualisieren, indem Sie session_name() aufrufen.

//Set the session name
session_name('newname');
//Start the session
session_start();

Wenn in session_name() kein Argument angegeben ist, wird der aktuelle Sitzungsname zurückgegeben.

Es sollte nur alphanumerische Zeichen enthalten. es sollte kurz und beschreibend sein (z. B. für Benutzer mit aktivierten Cookie-Warnungen). Der Sitzungsname darf nicht nur aus Ziffern bestehen, mindestens ein Buchstabe muss vorhanden sein. Andernfalls wird jedes Mal eine neue Sitzungs-ID generiert.

Sitzungssperre

Wie wir alle wissen, schreibt PHP Sitzungsdaten in eine Datei auf der Serverseite. Wenn eine Anfrage an PHP - Skript aus , die die Sitzung über beginnt session_start() , PHP Sperren diese Sitzungsdatei andere eingehende Anfragen zu blockieren / warten resultierende für gleiche session_id abzuschließen, weil von denen die anderen Anforderungen an stecken session_start() bis oder es sei denn, die gesperrte Sitzungsdatei wird nicht freigegeben

Die Sitzungsdatei bleibt gesperrt, bis das Skript abgeschlossen ist oder die Sitzung manuell geschlossen wird. Um diese Situation zu vermeiden, dh um zu verhindern, dass mehrere Anforderungen blockiert werden , können wir die Sitzung starten und die Sitzung schließen, wodurch die Sperrung der Sitzungsdatei aufgehoben wird und die verbleibenden Anforderungen fortgesetzt werden können.

// php < 7.0 
// start session 
session_start();

// write data to session
$_SESSION['id'] = 123; // session file is locked, so other requests are blocked

// close the session, release lock
session_write_close();

Jetzt wird überlegt, ob die Sitzung geschlossen ist, wie die Sitzungswerte gelesen werden sollen, auch wenn die Sitzung geschlossen ist und die Sitzung noch verfügbar ist. So können wir die Sitzungsdaten immer noch lesen.

echo $_SESSION['id'];    // will output  123

In php> = 7.0 können wir nur read_only session, read_write session und lazy_write session haben. Daher ist es nicht erforderlich, session_write_close()

Sichere Sitzung ohne Fehler starten

Viele Entwickler haben dieses Problem, wenn sie an großen Projekten arbeiten, insbesondere wenn sie an einigen modularen CMS mit Plugins, Addons, Komponenten usw. arbeiten wenn die Sitzung gestartet ist Wenn keine Sitzung vorhanden ist, starte ich die Sitzung sicher. Wenn eine Sitzung existiert, passiert nichts.

if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    if(session_status() == PHP_SESSION_NONE) {
        session_start(array(
          'cache_limiter' => 'private',
          'read_and_close' => true,
       ));
    }
}
else if (version_compare(PHP_VERSION, '5.4.0') >= 0)
{
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
}
else
{
    if(session_id() == '') {
        session_start();
    }
}

Dies kann Ihnen sehr session_start Fehler session_start zu vermeiden.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow