Heim  >  Artikel  >  PHP-Framework  >  Der Sitzungs- und Cookie-Mechanismus und verwandte Anwendungen im Laravel-Framework

Der Sitzungs- und Cookie-Mechanismus und verwandte Anwendungen im Laravel-Framework

L
Lnach vorne
2020-05-27 15:53:303371Durchsuche

Der Sitzungs- und Cookie-Mechanismus und verwandte Anwendungen im Laravel-Framework

Der Ursprung von Cookies

Wenn a Besuche des Benutzers Beim Zugriff auf eine Website speichert der Webserver einige Informationen auf dem lokalen Computer. Wenn der Benutzer die Website erneut besucht, prüft er, ob er sich auf der Website angemeldet hat. Wenn ja, sendet er die lokal aufgezeichneten Informationen Um diese Informationen auf der Webseite anzuzeigen, ist dies die Bedeutung von Cookies.

Wie identifiziert der Server den Benutzer? Wie wir alle wissen, handelt es sich beim HTTP-Protokoll um eine zustandslose Verbindung. Die sogenannte zustandslose Verbindung bedeutet, dass der Browser jedes Mal, wenn er eine Anfrage an den Server initiiert, keine Verbindung durchläuft, sondern jedes Mal eine neue Verbindung aufbaut. Wenn es sich um eine Verbindung handelt, kann der Serverprozess die Verbindung aufrechterhalten und sich einige Statusinformationen im Speicher merken. Nach Beendigung jeder Anfrage wird die Verbindung geschlossen und der relevante Inhalt freigegeben, sodass kein Status gespeichert wird und die Verbindung zu einer zustandslosen Verbindung wird. Bei Servern, die auf dem http-Protokoll basieren, kann der Server bei unterschiedlichen Verbindungen nicht erkennen, dass diese Verbindungen alle von demselben Benutzer stammen, weshalb Cookies entstanden sind.

Wenn auf den Server zum ersten Mal zugegriffen wird, enthält die HTTP-Nachricht kein Cookie. Zu diesem Zeitpunkt weist der Server den Browser an, die Cookie-Informationen in der nachgeschalteten HTTP-Nachricht zu übertragen Wenn der Browser erneut auf denselben Server zugreift, werden die Cookie-Informationen in die vorgelagerte HTTP-Anfrage übertragen, wodurch eine HTTP-Simulation und ein HTTP-Status realisiert werden.

Zusammenfassend lässt sich sagen, dass ein Cookie eigentlich ein kleines Stück Textinformation ist. Der Client fordert den Server an, den Benutzerstatus aufzuzeichnen, und sendet als Antwort ein Cookie an den Client-Browser. Der Client speichert das Cookie. Wenn der Browser die Website erneut anfordert, übermittelt der Browser die angeforderte URL zusammen mit dem Cookie an den Server. Der Server überprüft dieses Cookie, um den Status des Benutzers zu identifizieren. Der Server kann den Inhalt des Cookies auch nach Bedarf ändern.

2. Inhalte und Eigenschaften von Cookies

Hauptinhalte von Cookies: Name, Wert, Domäne, Pfad und Ablaufzeit. Namens- und Wertattribute werden durch die Programmeinstellungen angegeben, der Standardwert des Domänenattributs ist der Domänennamenteil der aktuellen URL, unabhängig davon, in welchem ​​Verzeichnis sich die Seite befindet, die dieses Cookie sendet. Der Standardwert des Pfads Das Attribut ist das Stammverzeichnis, also „/“, unabhängig davon, in welchem ​​Verzeichnis dieses Cookie ausgegeben wird. In welchem ​​Verzeichnis sich die Cookie-Seite befindet. Das Programm kann auf einen bestimmten Pfad eingestellt werden, um den Gültigkeitsbereich dieses Cookies weiter einzuschränken. Das Expires-Attribut legt das Ablaufdatum und die Ablaufzeit dieses Cookies fest.

Wenn das Expires-Attribut nicht gesetzt ist, verschwindet das Cookie automatisch und wird als Sitzungscookie bezeichnet. Wenn die Ablaufzeit festgelegt ist, speichert der Browser das Cookie auf der Festplatte gültig sein, bis die eingestellte Ablaufzeit überschritten ist. Auf Ihrer Festplatte gespeicherte Cookies können von verschiedenen Prozessen in Ihrem Browser gemeinsam genutzt werden.

Cookie-Funktionen:

1. Cookies sind nicht verschlüsselt und können beliebig manipuliert werden, daher sind sie sehr unsicher

2. Cookies können nicht zwischen verschiedenen Domänen geteilt werden. Die Cookie-Größe ist begrenzt, wie unten gezeigt

Der Sitzungs- und Cookie-Mechanismus und verwandte Anwendungen im Laravel-Framework

3. Die Geburt der Sitzung

In Um den schwerwiegenden Mangel der Cookie-Unsicherheit auszugleichen, wurde der Sitzungsmechanismus entwickelt, ein weiterer Mechanismus zum Aufzeichnen des Client-Status. Der Unterschied besteht darin, dass das Cookie im Client-Browser gespeichert wird, während die Sitzung auf dem Server gespeichert wird. Wenn der Client-Browser auf den Server zugreift, zeichnet der Server die Client-Informationen in irgendeiner Form auf dem Server auf, die als Sitzung bezeichnet wird.

Wenn ein Benutzer eine Verbindung zum Server herstellt, baut der Server eine Sitzung auf und der Server verwendet session_id, um zu identifizieren, welcher Benutzer zugreift. Wenn ein Benutzer eine Sitzung aufbaut, können Sie ihm ein eindeutiges Cookie geben, wenn die Benutzerautorisierung erfolgreich ist. Wenn ein Benutzer ein Formular sendet, hängt der Browser die Sitzungs-ID des Benutzers automatisch an die HTTP-Header-Informationen an, wenn der Server die Verarbeitung abschließt , werden die Ergebnisse an den Benutzer zurückgegeben, der der SessionId entspricht.

Zusammenfassend lässt sich sagen, dass die Sitzung verschlüsselt und sicherer als Cookies ist. Der Sitzungserstellungsprozess ist wie folgt: Beim Erstellen einer Sitzung für eine Client-Anfrage prüft der Server zunächst, ob die Anfrage eine Sitzungs-ID enthält Wenn der Server die Sitzungs-ID nicht speichert, erstellt er nach dem Abrufen der Sitzungs-ID eine Sitzung für den Client und generiert eine dieser Sitzung zugeordnete Sitzungs-ID Noch ist es nicht einfach, Muster zu finden und Zeichenfolgen zu fälschen. Diese Sitzungs-ID wird in dieser Antwort zur Speicherung an den Client zurückgegeben.

4. Ähnlichkeiten und Unterschiede zwischen Cookie und Sitzung

Viele Leute sagen, dass Cookies und Sitzungen dasselbe sind, der Unterschied liegt darin, ob sie für den Benutzer sichtbar sind. Ich stimme dieser Ansicht auch zu. Cookies werden im lokalen Browser gespeichert. Sie können die Serverleistung effektiv verbessern (belegen jedoch keinen Speicher). als unsicherer Klartext und begrenzte Größe. Die Sitzung wird im Server-Cache gespeichert, verschlüsselt und die Größe der Sitzungs-ID ist nicht begrenzt, wirkt sich jedoch auf die Serverleistung aus.

Wenn wir über die Verbindung zwischen Cookies und Sitzungen sprechen, müssen wir die Deaktivierung von Cookies in den Browsereinstellungen des Clients erwähnen, da Cookies der Träger der Sitzungs-ID sind. Sobald Cookies deaktiviert sind, kann die Sitzung nicht mehr ausgeführt werden verwendet werden. Es gibt jedoch zwei Möglichkeiten, das Abhängigkeitsproblem zu lösen. Dies bedeutet einfach, dass der Parameter „session_id“ zur URL-Adresse hinzugefügt wird. Der Server ändert das Formular automatisch und fügt ein ausgeblendetes Feld hinzu Es kann dem Formular hinzugefügt werden, wenn es gesendet wird, wie unten gezeigt:

Der Sitzungs- und Cookie-Mechanismus und verwandte Anwendungen im Laravel-Framework

Eine weitere Verbindung ist die Sitzungsfreigabe mit Bei mehreren Websites (gleiche übergeordnete Domäne und unterschiedliche Unterdomänen) müssen wir die gemeinsame Nutzung von Sitzungs-IDs von verschiedenen Websites lösen. Da die Domänennamen unterschiedlich sind (aaa.test.com und bbb.test.com) und die Sitzungs-ID in einem eigenen Cookie gespeichert ist, geht der Server davon aus, dass der Zugriff auf die beiden Unterseiten über unterschiedliche Sitzungen erfolgt. Die Lösung besteht darin, den Zweck der Cookie-Freigabe zu erreichen, indem der Domänenname des Cookies in den übergeordneten Domänennamen geändert wird, wodurch die gemeinsame Nutzung der Sitzungs-ID realisiert wird. Der Nachteil besteht darin, dass gleichzeitig auch die Cookie-Informationen zwischen Unterseiten ausgetauscht werden.

5. Verwandte Anwendungen unter Laravel

Sitzungsanwendung

in config/session Die Konfiguration in PHP lautet wie folgt:

   'driver' => env('SESSION_DRIVER', 'file'),
    'lifetime' => 120,
    'expire_on_close' => false,
    'encrypt' => false,
    'files' => storage_path('framework/sessions'),
    'connection' => null,
    'table' => 'sessions',
    'lottery' => [2, 100],
    'cookie' => 'laravel_session',
    'path' => '/',
    'domain' => null,
    'secure' => false,

Das Treiberkonfigurationselement wird zum Festlegen der Sitzungsspeichermethode verwendet. Die Standardeinstellung ist „Datei“, die in einer Datei gespeichert wird Konfigurationselement, d. h. Speicher/Framework/Sitzungen. Darüber hinaus unterstützt Laravel auch andere Speichermethoden:

Datenbank: Sitzungsdaten in der angegebenen Datentabelle speichern, die durch die Konfigurationselementtabelle festgelegt wird memcached: Sitzungsdaten in Memcached speichern redis: Sitzungsdaten im Array speichern in Redis: Sitzungsdaten in einem Array speichern. Um die Treiberkonfiguration zu ändern, müssen Sie zur .env-Datei im Projektstammverzeichnis gehen und die Option SESSION_DRIVER ändern.

Das Konfigurationselement „Lebensdauer“ wird verwendet, um den Gültigkeitszeitraum der Sitzung festzulegen, der standardmäßig 120 Minuten beträgt. Mit dem Konfigurationselement „expire_on_close“ wird festgelegt, ob die Sitzung sofort ungültig gemacht werden soll, wenn der Browser geschlossen wird. Mit dem Konfigurationselement „Verschlüsselung“ wird konfiguriert, ob Sitzungsdaten verschlüsselt werden. Das Lotterie-Konfigurationselement wird verwendet, um den Speicherort der recycelten Sitzung zu konfigurieren. Das Cookie-Konfigurationselement wird verwendet, um den Cookie-Namen zu konfigurieren, der die Sitzungs-ID speichert. Der Standardwert ist laravel_session. Das Pfadkonfigurationselement wird verwendet, um den Cookie-Speicherpfad zum Speichern der Sitzungs-ID zu konfigurieren. Standardmäßig ist das Projektstammverzeichnis. Das Domänenkonfigurationselement wird verwendet, um den Cookie-Speicherdomänennamen zu konfigurieren, der die Sitzungs-ID speichert. Mit dem sicheren Konfigurationselement wird konfiguriert, ob die Sitzungs-ID nur unter dem HTTPS-Protokoll an den Server gesendet wird.

Sitzungsfunktion verwenden

session(['site.xxx'=>'LaravelAcademy.org']);$site = session('site');dd($site);

Anfrageanfrage verwenden

Wir können alle Sitzungsdaten auf diese Weise erhalten:

$sessions = $request->session()->all();

Wir können auf Sitzungsdaten wie folgt zugreifen:

$request->session()->put('site', 'https://www.php.cn/');if($request->session()->has('site')){
    $site = $request->session()->get('site');
    dd($site);}

Darüber hinaus können wir auch Sitzungsdaten wie folgt abrufen (wenn die entsprechende Sitzung nicht existiert, geben Sie den Standardwert zurück):

$sitename = $request->session()->get('sitename','Laravel');dd($sitename);

Darüber hinaus können Sie die Push-Methode verwenden, um mehrere Daten in das Sitzungsarray zu übertragen:

$request->session()->push('site.xxx', 'https://www.php.cn/');$request->session()->push('site.xxx', 'Laravel');if($request->session()->has('site')){
    $site = $request->session()->get('site');
    dd($site);}使用pull方法,获取数据后删除使用flush方法,一次性删除所有session数据使用forget方法,删除某个session数据

Einmalige Sitzung

Wenn Sie sicherstellen möchten, dass die Wenn einmalige Sitzungsdaten gültig sind, können Sie den TestController@sessionx-Code wie folgt definieren:

public function sessionx(Request $request){
    $request->session()->reflash();
    $message = session('message');
    echo $message;}

Auf diese Weise sind die Sitzungsdaten immer gültig, egal wie Sie sie aktualisieren. Darüber hinaus können Sie auch angeben, welche Sitzungsdaten gültig sind:

$request->session()->keep(['message']);

Sie können Laravel-Code auch selbst kompilieren:

class Middleware implements HttpKernelInterface{
    ...
    public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
    {
        $this->checkRequestForArraySessions($request);
        if ($this->sessionConfigured()) {
            $session = $this->startSession($request); // 启动session
            $request->setSession($session);
        }
        $response = $this->app->handle($request, $type, $catch); // 调用controller的method
        if ($this->sessionConfigured()) {
            $this->closeSession($session);         //关闭session
            $this->addCookieToResponse($response, $session);
        }
        return $response;
    }
    ...
 
    protected function closeSession(SessionInterface $session)
    {
        $session->save();    // 保存session
        $this->collectGarbage($session);
    }
}

Cookie-Anwendung

Cookie hinzufügen

Zum Beispiel müssen wir im Controller den Cookie-Wert „Hallo, Laravel“ festlegen und die Gültigkeitsdauer auf 10 Minuten festlegen. Es wird empfohlen, hier die Cookie-Warteschlangenmethode Cookie::queue() zu verwenden, da das Cookie automatisch zur Antwort hinzugefügt wird:

<?php
namespace App\Http\Controllers;
use Cookie;
use App\Http\Controllers\Controller;

class DashboardController extends Controller{
    public function index()
    {
        Cookie::queue(&#39;younger&#39;, &#39;Hello, dayang&#39;, 30);
        return view(&#39;welcome&#39;);
    }
 }

Getting Cookie

The Die Verwendung von Cookies ist untrennbar mit Antwort und Anfrage verbunden. Es gibt zwei Ebenen, um den Wert von Cookies zu ermitteln: eine ist der Server und die andere ist der Client. Wenn Sie möchten, dass der Server den Wert des Cookies erhält, müssen Sie ihn aus der Anfrage abrufen:

public function index(Request $request)
{
    $cookie = $request->cookie(&#39;younger&#39;);
    dump($cookie);
}

Wenn Sie den Wert aller Cookies erhalten möchten, können Sie die Methode ohne Übergabe von Parametern verwenden:

public function index(Request $request){
    $cookies = $request->cookie();
    dump($cookies);
}

Cookies löschen

Die Methode zum Löschen von Cookies ist relativ einfach wie das Setzen von Cookies, außer dass die Ablaufzeit auf die Vergangenheit gesetzt wird. Der HTTP-Antwort müssen auch Cookies hinzugefügt werden, indem die Methoden make() oder discover() verwendet werden:

Methode 1:

\Cookie::queue(\Cookie::forget(&#39;younger&#39;));或 \setcookie(&#39;younger&#39;, &#39;&#39;, -1, &#39;/&#39;);

Methode 2:

$cookie = Cookie::forget(&#39;younger&#39;);//return Redirect::route(&#39;index&#39;)->withCookie($cookie);

Weitere technische Artikel zum Laravel-Framework finden Sie im Laravel-Tutorial!

Das obige ist der detaillierte Inhalt vonDer Sitzungs- und Cookie-Mechanismus und verwandte Anwendungen im Laravel-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jianshu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen