Maison  >  Article  >  cadre php  >  Le mécanisme de session et de cookie et les applications associées sous le framework Laravel

Le mécanisme de session et de cookie et les applications associées sous le framework Laravel

L
Lavant
2020-05-27 15:53:303371parcourir

Le mécanisme de session et de cookie et les applications associées sous le framework Laravel

1. L'origine des cookies

Quand un Visites de l'utilisateur Lors de l'accès à un site Web, le serveur Web enregistre certaines informations sur l'ordinateur local. Lorsque l'utilisateur visite à nouveau le site Web, le serveur vérifie si l'utilisateur s'est connecté au site Web. Si tel est le cas, il enverra les informations enregistrées localement. L'affichage sur la page Web est le sens de l'existence d'un cookie.

Alors, comment le serveur identifie-t-il l'utilisateur ? Comme nous le savons tous, le protocole http est une connexion sans état. La connexion dite sans état signifie que chaque fois que le navigateur initie une requête au serveur, il n'établit pas de connexion, mais établit à chaque fois une nouvelle connexion. S'il s'agit d'une connexion, le processus serveur peut maintenir la connexion et mémoriser l'état de certaines informations dans la mémoire. Une fois chaque requête terminée, la connexion est fermée et le contenu concerné est publié, donc aucun état n'est mémorisé et la connexion devient sans état. Pour les serveurs basés sur le protocole http, pour différentes connexions, le serveur ne peut pas identifier que ces connexions proviennent toutes du même utilisateur, c'est pourquoi les cookies sont nés.

Lorsque vous accédez au serveur pour la première fois, il n'y a pas de cookie dans le message http. À ce moment, le serveur demande au navigateur de transmettre les informations du cookie dans le message HTTP de réponse (réponse) ; Le navigateur accède à nouveau au même serveur. Lors de l'entrée dans le domaine, les informations du cookie seront transportées dans la requête HTTP en amont de la requête, réalisant ainsi la simulation et l'état HTTP.

Pour résumer, un cookie est en fait un petit morceau d’information textuelle. Le client demande au serveur. Si le serveur doit enregistrer le statut de l'utilisateur, il utilise la réponse pour émettre un cookie au navigateur client. Le client enregistrera le cookie. Lorsque le navigateur demande à nouveau le site Web, il soumet l'URL demandée avec le cookie au serveur. Le serveur vérifie ce cookie pour identifier le statut de l'utilisateur. Le serveur peut également modifier le contenu du cookie si nécessaire.

2. Contenu et caractéristiques des cookies

Contenu principal du cookie : nom, valeur, domaine, chemin et délai d'expiration Attributs du nom et de la valeur sont données par les paramètres du programme, la valeur par défaut est une référence nulle. La valeur par défaut de l'attribut Domaine est la partie nom de domaine de l'URL actuelle, quel que soit le répertoire dans lequel se trouve la page qui envoie ce cookie. La valeur par défaut du chemin. L'attribut est le répertoire racine, c'est-à-dire "/", quel que soit le répertoire dans lequel se trouve la page du cookie. Le programme peut être défini sur un certain chemin pour limiter davantage la portée de ce cookie. L'attribut Expires définit la date et l'heure d'expiration de ce cookie

Lorsque l'attribut Expires n'est pas défini, le cookie disparaît automatiquement. et est appelé cookie de session. Les cookies de session existent en mémoire plutôt que sur le disque dur local. Si le délai d'expiration est défini, le navigateur enregistrera le cookie sur le disque dur. Après la fermeture et la réouverture du navigateur, ces cookies seront toujours conservés. être valable jusqu’à ce que le délai d’expiration fixé soit dépassé. Les cookies stockés sur votre disque dur peuvent être partagés entre différents processus de votre navigateur.

Fonctionnalités des cookies :

1. Les cookies ne sont pas cryptés et peuvent être falsifiés à volonté, ils sont donc très dangereux

2. Les cookies ne peuvent pas être partagés entre différents domaines. La taille des cookies est limitée, comme indiqué ci-dessous

Le mécanisme de session et de cookie et les applications associées sous le framework Laravel

3 La naissance de la session

Dans. Afin de combler le défaut fatal de l'insécurité des cookies, le mécanisme de session est né. La session est un autre mécanisme d'enregistrement de l'état du client. La différence est que le cookie est enregistré dans le navigateur client, tandis que la session est enregistrée sur le serveur. Lorsque le navigateur client accède au serveur, le serveur enregistre les informations client sur le serveur sous une forme appelée session.

Lorsqu'un utilisateur se connecte au serveur, le serveur établit une session et le serveur utilise session_id pour identifier l'utilisateur qui accède. Lorsqu'un utilisateur établit une session, vous pouvez lui attribuer un cookie unique lorsque l'autorisation de l'utilisateur est réussie. Lorsqu'un utilisateur soumet un formulaire, le navigateur ajoute automatiquement l'ID de session de l'utilisateur aux informations d'en-tête HTTP lorsque le serveur termine le traitement après ce formulaire. , les résultats sont renvoyés à l'utilisateur correspondant au SessionId.

Pour résumer, la session est cryptée et plus sécurisée que les cookies. Le processus de création de session est le suivant : Lors de la création d'une session pour une requête client, le serveur vérifie d'abord si la requête contient session_id. Le serveur va Après avoir récupéré le session_id, si le serveur ne stocke pas le session_id, créera un session_id ; sinon, créera une session pour le client et générera un sessionId associé à cette session. La valeur de sessionId est une valeur qui n'est ni répétée. ni Une chaîne difficile à trouver des modèles et à forger. Cet ID de session sera renvoyé au client dans cette réponse pour stockage.

4. Similitudes et différences entre cookie et session

Beaucoup de gens disent que les cookies et les sessions sont la même chose, la différence réside dans leur visibilité par l'utilisateur. Je suis également d'accord avec ce point de vue. En tant que support de session, les cookies sont stockés dans le navigateur local. Ils sont faciles à utiliser et à stocker. Ils peuvent améliorer efficacement les performances du serveur (ils n'occupent cependant pas de mémoire). comme texte brut non sécurisé et taille limitée ; La session est enregistrée dans le cache du serveur, cryptée, et la taille de session_id n'est pas limitée, mais cela affecte les performances du serveur.

En parlant de la connexion entre les cookies et les sessions, nous devons mentionner la désactivation des cookies Dans les paramètres du navigateur client, les utilisateurs peuvent désactiver les cookies car les cookies sont porteurs de session_id, donc une fois les cookies désactivés, la session ne peut pas. être utilisé. Mais il existe deux manières de résoudre le problème de dépendance : l'une est la réécriture d'URL, ce qui signifie simplement l'ajout du paramètre session_id à l'adresse URL. L'autre est le champ masqué du formulaire. Le serveur modifiera automatiquement le formulaire et ajoutera un champ masqué. il peut être ajouté au formulaire. Le session_id peut être renvoyé au serveur lors de la soumission, comme indiqué ci-dessous :

Le mécanisme de session et de cookie et les applications associées sous le framework Laravel

Une autre connexion est le partage de session pour un seul serveur avec. plusieurs sites Web (même domaine parent et différents sous-domaines), nous devons résoudre le partage des session_ids de différents sites Web. Puisque les noms de domaine sont différents (aaa.test.com et bbb.test.com), et que le session_id est stocké dans son propre cookie, le serveur pensera que l'accès aux deux sous-sites provient de sessions différentes. La solution consiste à atteindre l'objectif de partage de cookies en modifiant le nom de domaine des cookies en nom de domaine parent, réalisant ainsi le partage de session_id. L'inconvénient est que les informations des cookies entre les sous-sites sont également partagées en même temps.

5. Applications associées sous laravel

application de session

dans config/session. la configuration en php est la suivante :

   'driver' => env('SESSION_DRIVER', 'file'),
    'lifetime' => 120,
    'expire_on_close' => false,
    'encrypt' => false,
    'files' => storage_path('framework/sessions'),
    'connection' => null,
    'table' => 'sessions',
    'lottery' => [2, 100],
    'cookie' => 'laravel_session',
    'path' => '/',
    'domain' => null,
    'secure' => false,

L'élément de configuration du pilote est utilisé pour définir la méthode de stockage de session. La valeur par défaut est file, qui est stocké dans un fichier. Le fichier se trouve dans le chemin configuré par les fichiers. élément de configuration, c'est-à-dire stockage/framework/sessions. De plus, Laravel prend également en charge d'autres méthodes de stockage :

base de données : stocker les données de session dans la table de données spécifiée, qui est définie par la table des éléments de configuration memcached : stocker les données de session dans Memcached redis : stocker les données de session dans un tableau dans Redis : stocker les données de session dans un tableau. Cette configuration n'est utilisée que dans l'environnement de test. Pour modifier la configuration du pilote, vous devez accéder au fichier .env dans le répertoire racine du projet et y modifier l'option SESSION_DRIVER.

L'élément de configuration à vie est utilisé pour définir la période de validité de la session, qui est par défaut de 120 minutes. L'élément de configuration expire_on_close est utilisé pour définir s'il faut invalider la session immédiatement lorsque le navigateur est fermé. L'élément de configuration Encrypt est utilisé pour configurer si les données de session sont chiffrées. L'élément de configuration loterie est utilisé pour configurer l'emplacement de stockage de la session recyclée. L'élément de configuration du cookie est utilisé pour configurer le nom du cookie qui stocke l'ID de session. La valeur par défaut est laravel_session. L'élément de configuration du chemin est utilisé pour configurer le chemin de stockage des cookies pour stocker l'ID de session. La valeur par défaut est le répertoire racine du projet. L'élément de configuration du domaine est utilisé pour configurer le nom de domaine de stockage des cookies qui stocke l'ID de session. L'élément de configuration sécurisé est utilisé pour configurer si l'ID de session est envoyé au serveur uniquement sous le protocole HTTPS.

Utiliser la fonction de session

session(['site.xxx'=>'LaravelAcademy.org']);$site = session('site');dd($site);

Utiliser la demande de demande

Nous pouvons obtenir toutes les données de session de cette manière :

$sessions = $request->session()->all();

On peut accéder aux données de Session comme ceci :

$request->session()->put('site', 'https://www.php.cn/');if($request->session()->has('site')){
    $site = $request->session()->get('site');
    dd($site);}

De plus, on peut également obtenir des données de Session comme celle-ci (si la Session correspondante n'existe pas, renvoyer la valeur par défaut) :

$sitename = $request->session()->get('sitename','Laravel');dd($sitename);

De plus, vous pouvez utiliser la méthode push pour transmettre plusieurs données vers le tableau Session :

$request->session()->push('site.xxx', 'https://www.php.cn/');$request->session()->push('site.xxx', 'Laravel');if($request->session()->has('site')){
    $site = $request->session()->get('site');
    dd($site);}使用pull方法,获取数据后删除使用flush方法,一次性删除所有session数据使用forget方法,删除某个session数据

Session unique

Si vous souhaitez vous assurer que le les données de session uniques sont valides, vous pouvez définir le code TestController@sessionx comme suit :

public function sessionx(Request $request){
    $request->session()->reflash();
    $message = session('message');
    echo $message;}

De cette façon, les données de session seront toujours valides, quelle que soit la façon dont vous les actualisez. De plus, vous pouvez également spécifier quelles données de session sont valides :

$request->session()->keep(['message']);

Vous pouvez également compiler vous-même du code laravel :

class Middleware implements HttpKernelInterface{
    ...
    public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
    {
        $this->checkRequestForArraySessions($request);
        if ($this->sessionConfigured()) {
            $session = $this->startSession($request); // 启动session
            $request->setSession($session);
        }
        $response = $this->app->handle($request, $type, $catch); // 调用controller的method
        if ($this->sessionConfigured()) {
            $this->closeSession($session);         //关闭session
            $this->addCookieToResponse($response, $session);
        }
        return $response;
    }
    ...
 
    protected function closeSession(SessionInterface $session)
    {
        $session->save();    // 保存session
        $this->collectGarbage($session);
    }
}

Application de cookies

Ajouter un cookie

Par exemple, nous devons définir une valeur de cookie de "Bonjour, Laravel" dans le contrôleur et définir la période de validité sur 10 minutes. Il est recommandé d'utiliser ici la méthode de file d'attente de cookies Cookie::queue(), car le cookie sera automatiquement ajouté à la réponse :

<?php
namespace App\Http\Controllers;
use Cookie;
use App\Http\Controllers\Controller;

class DashboardController extends Controller{
    public function index()
    {
        Cookie::queue(&#39;younger&#39;, &#39;Hello, dayang&#39;, 30);
        return view(&#39;welcome&#39;);
    }
 }

Obtenir un cookie

Le L'utilisation de cookies est indissociable de Réponse et de Demande. Il existe deux niveaux pour obtenir la valeur du Cookie, l'un est le serveur et l'autre est le client. Si vous souhaitez que le serveur récupère la valeur du Cookie, vous devez l'obtenir à partir de la Requête :

public function index(Request $request)
{
    $cookie = $request->cookie(&#39;younger&#39;);
    dump($cookie);
}

Si vous souhaitez obtenir la valeur de tous les Cookies, vous pouvez utiliser la méthode sans passer de paramètres :

public function index(Request $request){
    $cookies = $request->cookie();
    dump($cookies);
}

Effacer les cookies

La méthode d'effacement des cookies est relativement simple. Le principe est le même que celui de la configuration des cookies, sauf que le délai d'expiration est défini sur le passé. Des cookies doivent également être ajoutés à la réponse HTTP, en utilisant les méthodes make() ou Forget() :

Méthode 1 :

\Cookie::queue(\Cookie::forget(&#39;younger&#39;));或 \setcookie(&#39;younger&#39;, &#39;&#39;, -1, &#39;/&#39;);

Méthode 2 :

$cookie = Cookie::forget(&#39;younger&#39;);//return Redirect::route(&#39;index&#39;)->withCookie($cookie);

Pour plus d'articles techniques sur le framework Laravel, veuillez visiter le tutoriel laravel !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer