Maison >développement back-end >tutoriel php >Explication détaillée du mécanisme de traitement Sessionid dans Laravel
Cet article vous présente principalement les informations pertinentes sur le mécanisme de traitement Sessionid dans Laravel. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de tous les amis qui en ont besoin, suivez l'éditeur. ci-dessous. Venez apprendre ensemble. J'espère que cela aide tout le monde.
Avant-propos
Cet article vous présente principalement le contenu pertinent sur le mécanisme de traitement Sessionid dans Laravel, et le partage pour votre référence et votre étude . Les mots suivants Pas grand chose à dire, jetons un œil à l’introduction détaillée.
Le nom du cookie de session peut être défini dans le fichier de configuration de Laravel config/session.php. Par exemple, dans ce projet, le nom est défini sur "sns_session" :
/* |-------------------------------------------------------------------------- | 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',
Nous pouvons voir. la page d'actualisation, En regardant les cookies, vous trouverez un cookie nommé sns_session, qui est le nom que nous avons personnalisé.
Cet identifiant de session est le pont entre le cookie et la session. Le serveur utilise cet identifiant de session pour déterminer de quel client provient la requête.
L'identifiant de session de Laravel change à chaque fois qu'il est actualisé
Cependant, chaque fois que la page est actualisée, la valeur de ce cookie changera ! Alors, comment le serveur maintient-il la session ? Parce que votre identifiant de session change constamment.
Laravel chiffre les cookies
Nous sommes dans supplier/laravel/framework/src/Illuminate/ Debug dans la méthode de sauvegarde de Session/Store.php et imprimez la pile d'appels ici :
/** * {@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)); }
Chaque fois que la page est actualisée, l'attribut id de l'objet Store ne change pas réellement. Cet attribut est sessionid. La valeur du cookie. En d’autres termes, la valeur de sessionid ne change pas à chaque fois, mais lorsque le cookie est écrit, la valeur change.
La raison a été trouvée dans la méthode de cryptage dans supplier/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php Ce middleware crypte toutes les valeurs des cookies. traitement, il est inclus dans le middleware web.
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; }
Avec cette méthode de cryptage, le résultat du cryptage est différent à chaque fois, il semble donc que la valeur de sessionid a changé à chaque fois, mais en fait elle n'a pas changé. Ce cookie sera déchiffré lorsque cela sera nécessaire.
Le framework Laravel peut être conçu de cette manière pour empêcher le détournement de session ! La réflexion est assez complète !
Autres connaissances supplémentaires
Nom de session de configuration PHP natif
fonction session_name() :
<?php /* 设置会话名称为 WebsiteID */ $previous_name = session_name("WebsiteID"); echo "The previous session name was $previous_name<br />"; ?>
renvoie le nom de la session en cours. Si le paramètre name est spécifié, la fonction session_name()
mettra à jour le nom de la session et renverra le nom de session d'origine. session_name()
. Par conséquent, pour définir le nom de la session, vous devez appeler la fonction session.name
avant d'appeler la fonction session_start()
ou session_register()
pour chaque requête. session_name()
La différence et la relation entre COOKIE et SESSION
Recommandations associées :
Expliquez comment personnaliser cryptage dans le service Laravel
Fichier de routage fractionné optimisé Laravel
interface d'application d'écriture laravel ( API)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!