Maison > Article > développement back-end > Introduction détaillée au 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 ce qui suit. Apprenons ensemble.
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 que si nous actualisons la page et vérifions les cookies, nous trouverons 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 cet objet Store est en fait Il n'y a aucun changement. Cet attribut est la valeur du cookie sessionid. 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 a pas. 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 />"; ?>
session_name()
La fonction 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.
Lorsque la requête démarre, le nom de la session sera réinitialisé et stocké dans l'élément de configuration session.name
. Par conséquent, pour définir le nom de la session, vous devez appeler la fonction session_start()
avant d'appeler la fonction session_register()
ou session_name()
pour chaque requête.
La différence et la relation entre COOKIE et SESSION
COOKIE est enregistré côté client, tandis que SESSION est enregistré côté serveur
En termes de sécurité, SESSION est plus sécurisé
Du point de vue du type de contenu enregistré, COOKIE enregistre uniquement Chaîne de caractères (et peut être automatiquement convertie en chaîne)
Du point de vue de la taille du contenu enregistré, le contenu enregistré par COOKIE est limité et relativement petit, alors que SESSION le fait essentiellement pas cette limitation
Du point de vue des performances, l'utilisation de SESSION mettra plus de pression sur le serveur
SEEION s'appuie sur COOKIE, mais si COOKIE est désactivé, peut également être transmis via l'url
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!