Maison  >  Article  >  développement back-end  >  Introduction détaillée au mécanisme de traitement Sessionid dans Laravel

Introduction détaillée au mécanisme de traitement Sessionid dans Laravel

巴扎黑
巴扎黑original
2017-09-14 10:18:491578parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn