Detaillierte Erläuterung des Sessionid-Verarbeitungsmechanismus in Laravel

*文
Freigeben: 2023-03-19 08:42:02
Original
2887 Leute haben es durchsucht

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Sessionid-Verarbeitungsmechanismus in Laravel ein. Er bietet einen gewissen Referenz-Lernwert für alle, die ihn beim Lernen oder Arbeiten benötigen Kommen Sie und lernen Sie gemeinsam. Ich hoffe, es hilft allen.

Vorwort

Dieser Artikel führt Sie hauptsächlich in den relevanten Inhalt zum Sessionid-Verarbeitungsmechanismus in Laravel ein und stellt ihn für Ihre Referenz und Ihr Studium zur Verfügung . Zu den folgenden Worten gibt es nicht viel mehr zu sagen, werfen wir einen Blick auf die ausführliche Einleitung.

Der Name des Sitzungscookies kann in der Konfigurationsdatei config/session.php von Laravel festgelegt werden. In diesem Projekt ist der Name beispielsweise auf „sns_session“ festgelegt:

/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
 
'cookie' => 'sns_session',
Nach dem Login kopieren

Wir können sehen Wenn Sie sich die Cookies ansehen, finden Sie auf der Aktualisierungsseite ein Cookie mit dem Namen sns_session. Dies ist der Name, den wir angepasst haben.

Diese Sitzungs-ID ist die Brücke zwischen Cookie und Sitzung. Der Server verwendet diese Sitzungs-ID, um zu bestimmen, von welchem ​​Client die Anfrage kommt.

Laravels Sitzungs-ID ändert sich jedes Mal, wenn sie aktualisiert wird

Jedes Mal, wenn die Seite aktualisiert wird, ändert sich dieser Cookie-Wert! Wie verwaltet der Server die Sitzung? Weil sich Ihre Sitzungs-ID ständig ändert.

Laravel verschlüsselt Cookies

Wir befinden uns in Vendor/Laravel/Framework/src/Illuminate/ Debug in der Speichermethode von Session/Store.php und drucken Sie den Aufrufstapel hier aus:

/**
 * {@inheritdoc}
 */
public function save()
{
 $this->addBagDataToSession();
 
 $this->ageFlashData();
 
 $this->handler->write($this->getId(), $this->prepareForStorage(serialize($this->attributes)));
 
 $this->started = false;
 
 dd(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT,5));
}
Nach dem Login kopieren

Jedes Mal, wenn die Seite aktualisiert wird, ändert sich das ID-Attribut dieses Store-Objekts nicht wirklich. Dieses Attribut ist sessionid. Der Wert des Cookies. Mit anderen Worten, der Wert von sessionid ändert sich nicht jedes Mal, aber wenn das Cookie geschrieben wird, ändert sich der Wert.

Der Grund wurde in der Verschlüsselungsmethode in seller/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php gefunden. Diese Middleware verschlüsselt alle Cookie-Werte Für die Verarbeitung ist es in die Web-Middleware eingebunden.

protected function encrypt(Response $response)
{
 foreach ($response->headers->getCookies() as $cookie) {
 if ($this->isDisabled($cookie->getName())) {
  continue;
 }
 
 $response->headers->setCookie($this->duplicate(
  $cookie, $this->encrypter->encrypt($cookie->getValue())
 ));
 }
 return $response;
}
Nach dem Login kopieren

Bei dieser Verschlüsselungsmethode ist das Ergebnis der Verschlüsselung jedes Mal anders, sodass es den Anschein hat, dass sich der Wert von sessionid jedes Mal geändert hat, tatsächlich hat er sich jedoch nicht geändert. Dieses Cookie wird bei Bedarf entschlüsselt.

Das Laravel-Framework kann auf diese Weise entworfen werden, um Session-Hijacking zu verhindern! Die Betrachtung ist recht umfassend!

Weitere Zusatzkenntnisse

Native PHP-Einstellung des Sitzungsnamens

session_name()-Funktion:

<?php
 
/* 设置会话名称为 WebsiteID */
 
$previous_name = session_name("WebsiteID");
 
echo "The previous session name was $previous_name<br />";
?>
Nach dem Login kopieren

session_name() Funktion gibt den aktuellen Sitzungsnamen zurück. Wenn der Namensparameter angegeben ist, aktualisiert die Funktion session_name() den Sitzungsnamen und gibt den ursprünglichen Sitzungsnamen zurück.

Wenn die Anfrage startet, wird der Sitzungsname zurückgesetzt und im Konfigurationselement session.name gespeichert. Um den Sitzungsnamen festzulegen, müssen Sie daher für jede Anfrage die Funktion session_start() aufrufen, bevor Sie die Funktion session_register() oder session_name() aufrufen.

Der Unterschied und die Beziehung zwischen COOKIE und SESSION

  • COOKIE wird auf der Clientseite gespeichert, während SESSION gespeichert wird auf der Serverseite

  • Aus Sicherheitsgründen ist SESSION sicherer

  • Aus Sicht der Art der gespeicherten Inhalte speichert COOKIE nur Zeichen Zeichenfolge (und kann automatisch in eine Zeichenfolge umgewandelt werden)

  • Aus Sicht der Größe des gespeicherten Inhalts ist der von COOKIE gespeicherte Inhalt begrenzt und relativ klein, während SESSION dies grundsätzlich tut Diese Einschränkung gilt nicht

  • Aus Leistungssicht wird die Verwendung von SESSION den Server stärker belasten

  • SEEION verlässt sich auf COOKIE, aber wenn COOKIE ist deaktiviert, kann auch über die URL übergeben werden

Verwandte Empfehlungen:

Erklären Sie, wie Sie anpassen können Verschlüsselung im Laravel-Dienst

Laravel-optimierte Split-Routing-Datei

Laravel-Schreib-APP-Schnittstelle ( API)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Sessionid-Verarbeitungsmechanismus in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage