Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in den Sessionid-Verarbeitungsmechanismus in Laravel

Detaillierte Einführung in den Sessionid-Verarbeitungsmechanismus in Laravel

巴扎黑
巴扎黑Original
2017-09-14 10:18:491568Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Sessionid-Verarbeitungsmechanismus in Laravel ein Lasst uns gemeinsam lernen.

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',

Wir können sehen, dass wir, wenn wir die Seite aktualisieren und die Cookies überprüfen, ein Cookie namens sns_session finden, das 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 Fügen Sie es in die Speichermethode von Session/Store.php ein 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));
}

Jedes Mal, wenn die Seite aktualisiert wird, wird das ID-Attribut dieses Store-Objekts angezeigt Es gibt tatsächlich keine Änderung. Dieses Attribut ist der Wert des Session-ID-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;
}

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, aber tatsächlich hat sich das geändert nicht. Ändern. 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 />";
?>

session_name() Die 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 per URL übergeben werden

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

Stellungnahme:
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